2016-05-11 15 views
-1

Also schrieb ich einen einfachen c-Code, der eine Zahl in eine Zeichenkette umwandelt, und da ist eine Sache, die mir unklar ist. Auf diesem Code:Konvertiere eine Zahl in eine Zeichenkette

void itos(int a,char *p){ 
    int pom = a; 
    do{ 
     p++; 
     pom/=10; 
    }while(pom); 
    *p = '\0'; 
    do{ 
     pom = a%10 + '0'; 
     *--p = pom; 
     a/=10; 
     }while(a); 
    } 

Ich bekomme immer Segmentierung Fehler und ich verstehe nicht warum. Die Zeichenfolge wird an die Adresse übergeben, also sollte die Zeichenfolge aus der Hauptdatei nicht die Zeichenfolge in der Funktion enthalten? Auf der anderen Seite funktioniert dieser Code pefectly:

 char *itos(int a,char *p){ 
    int pom = a; 
    do{ 
     p++; 
     pom/=10; 
    }while(pom); 
    *p = '\0'; 
    do{ 
     pom = a%10 + '0'; 
     *--p = pom; 
     a/=10; 
    }while(a); 
    return p; 

    } 

Wenn somone mir die diffrence erklären könnte (vor allem, warum die erste nicht funktioniert) würde ich extremlly greatful sein.

+3

Die zwei unterscheidet nur den Rückgabewert, bitte auch den Code, der diese Funktion aufruft. – fluter

+0

Bereits die Antwort erhalten. Der Zeiger wurde nicht korrekt initialisiert. Danke für die Hilfe! – sale

Antwort

0

Die zwei Funktionen unterscheiden sich nur durch den Rückgabewert, gibt man den Zeiger p zurück, der andere gibt nichts zurück. So stellen Sie sicher, dass Sie den Zeiger Sie in übergeben gültige Adresse initialisiert werden, das heißt, es auf einen Puffer-Punkte:

char str[100]; 
itos(a, str); 

oder

char *str = malloc(100); 
itos(a, str); 

Um integer zu Zeichenfolge konvertieren, können Sie einfach ausdrucken:

char str[100]; 
int n; 
snprintf(str, sizeof str, "%d", n); 
+0

Oh, das wusste ich nicht. Aber ich bin immer noch Bugs, warum Code oben funktioniert nicht. – sale

+1

@sale wird der Zeiger an die Funktion übergeben initialisiert? – fluter

+0

Das behebt das Problem. Vielen Dank! – sale

Verwandte Themen