Avatar billede claushelth Nybegynder
03. december 2002 - 02:14 Der er 3 kommentarer og
1 løsning

atoi(); hvordan i C?

Hej Eksperter

Jeg sidder og skal typecaste en int til char i c i linux, men kan ikke finde den korrekte syntaks for kaldet. Jeg kan heller ikke finde den i stdlib.h (der er kun atoi();).

Jeg fandt en kodestump på nettet hvor der var nogle der havde kodet den men den virker ikke får en parse error i slutningen?

Er der nogle der kender standardkaldet til funktionen uden jeg behøves at kode den selv?
Eller nogle der har den korrekte kode til C i linux.

Koden:
char *itoa(int val, char *ptr)
{
    int sign = (val < 0) ? -1 : 1;
    char tmp[16];
    int i = 0, j = 0;

    val = sign * val;
    while (val != 0)
    {
        tmp[i] = (val % 10) + '0';
        val = val / 10;
        i++;
    }
    if (i == 0)
    {
        strcpy(ptr, "0");
    }
    else
    {
        if (sign == -1)
        {
            ptr[j] = '-';
            j++;
        }
        while (i != 0)
        {
            ptr[j] = tmp[i - 1];
            i--;
            j++;
        }
        ptr[j] = '\000';
  }
}

Jeg har prøvet at kalde den på 2 måder:

char *Variabel_p;
int  Value;

Variable = itoa(Value,Variable_p);

eller bare:

itoa(Value,Variable_p);

Jeg får desuden en Warning: passing arg 1 of 'itoa' makes integer from pionter without a cast.
Avatar billede arne_v Ekspert
03. december 2002 - 07:28 #1
#include <string.h>
#include <stdio.h>

char *itoa(int val, char *ptr)
{
    int sign = (val < 0) ? -1 : 1;
    char tmp[16];
    int i = 0, j = 0;

    val = sign * val;
    while (val != 0)
    {
        tmp[i] = (val % 10) + '0';
        val = val / 10;
        i++;
    }
    if (i == 0)
    {
        strcpy(ptr, "0");
    }
    else
    {
        if (sign == -1)
        {
            ptr[j] = '-';
            j++;
        }
        while (i != 0)
        {
            ptr[j] = tmp[i - 1];
            i--;
            j++;
        }
        ptr[j] = '\000';
  }
  return ptr;
}

int main()
{
  char buf[32];
  char *variable_p;
  int  Value = 123;
  variable_p = itoa(Value,buf);
  printf("%s\n", variable_p);
}
Avatar billede arne_v Ekspert
03. december 2002 - 07:30 #2
Men de fleste ville nok bruge:

#include <stdio.h>

int main()
{
  char buf[32];
  int  value = 123;
  sprintf(buf,"%d",value);
  printf("%s\n", buf);
}
Avatar billede claushelth Nybegynder
03. december 2002 - 09:31 #3
tak det var nu også den sidste løsning jeg først ledte efter.
Jeg troede den lå i stdlib.h.

Takker
Avatar billede arne_v Ekspert
03. december 2002 - 09:56 #4
sprintf liger i stdio sammen med de andre printf'er.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester