Konvertieren von int in string in C

Lesezeit: 4 Minuten

Benutzeravatar von Shweta
Schweta

Ich benutze die itoa() Funktion zum Konvertieren eines int hinein stringaber es gibt einen Fehler:

undefined reference to `itoa'
collect2: ld returned 1 exit status

Was ist der Grund? Gibt es eine andere Möglichkeit, diese Konvertierung durchzuführen?

  • Ja, ich habe stdlib.h eingefügt, aber es funktioniert immer noch nicht

    – Schweta

    9. März 2011 um 7:20 Uhr

  • Mögliches Duplikat von How to convert an int to string in C

    – Ciro Santilli OurBigBook.com

    1. September 2018 um 9:50 Uhr

Benutzeravatar von Edwin Buck
Edwin Buck

Verwenden snprintfes ist tragbarer als itoa.

itoa ist weder Teil von Standard C noch Teil von Standard C++; aber viele Compiler und zugehörige Bibliotheken unterstützen es.

Beispiel von sprintf

char* buffer = ... allocate a buffer ...
int value = 4564;
sprintf(buffer, "%d", value);

Beispiel von snprintf

char buffer[10];
int value = 234452;
snprintf(buffer, 10, "%d", value);

Beide Funktionen sind ähnlich fprintf, aber die Ausgabe wird in ein Array und nicht in einen Stream geschrieben. Der Unterschied zwischen sprintf und snprintf ist das snprintf garantiert keinen Pufferüberlauf, indem bis zu einer maximalen Anzahl von Zeichen geschrieben wird, die im gespeichert werden können buffer.

  • Ein weiterer Unterschied zw sprintf adn snprintf ist der Standard, für den sie beschrieben werden in: C89 (und später). sprintf; C99 für snprintf. Insbesondere der Windows-Bibliothek fehlt die snprintf funktionieren oder sich anders verhalten, als der Standard beschreibt.

    – pmg

    9. März 2011 um 10:06 Uhr

  • Ist snprintfPutten '\0' zum letzten Element meines Arrays? Damit ich weiß, wo es endet?

    – Silidron

    20. November 2016 um 9:30 Uhr

  • @MuhamedCicak Es wird das abschließende „\0“ hinzugefügt, vorausgesetzt, dass der geschriebene Wert und das Ende „\0“ in den Größenparameter passen. Sie sollten den Rückgabewert überprüfen, um zu sehen, ob es die eingegebene Größe oder größer ist. Wenn es sich um die eingegebene Größe oder mehr handelt, wurde das Ergebnis abgeschnitten, und der Puffer enthält möglicherweise kein abschließendes ‘\0’-Zeichen

    – Edwin Buck

    20. November 2016 um 17:59 Uhr

  • @EdwinBuck Das ist richtig, aber zur weiteren Verdeutlichung würde ich sagen, dass Sie immer ein ‘\ 0’ haben, auch wenn “Abschneiden” auftritt (es sei denn, Sie haben eine Größe von Null angegeben, aber diese Verwendung ist nur sinnvoll, um den erforderlichen Puffer zu bestimmen Größe, bevor Sie einen zweiten Anruf tätigen). Um ganz richtig zu sein, muss man auch prüfen, ob der zurückgegebene Wert negativ ist, was passiert, “wenn ein Codierungsfehler aufgetreten ist” (was auch immer das bedeutet). Im Falle eines Fehlers gibt nichts an, dass der Puffer zumindest mit ‘\0’ beginnt, und es kann zu Schrecken kommen, wenn versucht wird, ihn zu verwenden!

    – Johan Boule

    8. April 2020 um 15:11 Uhr


Verwenden snprintf – es ist Standard und in jedem Compiler verfügbar. Fragen Sie es nach der benötigten Größe ab, indem Sie es mit aufrufen NULL, 0 Parameter. Weisen Sie am Ende ein Zeichen mehr für null zu.

int length = snprintf( NULL, 0, "%d", x );
char* str = malloc( length + 1 );
snprintf( str, length + 1, "%d", x );
...
free(str);

Benutzeravatar von Mirwise Khan
Mirweiser Khan

Bevor ich fortfahre, muss ich Sie warnen itoa ist KEINE ANSI-Funktion – es ist keine Standard-C-Funktion. Du solltest benutzen sprintf umwandeln ein int in eine Schnur.

itoa nimmt drei Argumente.

  • Die erste ist die zu konvertierende Ganzzahl.
  • Der zweite ist ein Zeiger auf ein Array von Zeichen – hier wird die Zeichenfolge gespeichert. Das Programm kann abstürzen, wenn Sie a übergeben char * Variable, also sollten Sie ein Zeichenarray normaler Größe übergeben und es wird gut funktionieren.
  • Das letzte ist NICHT die Größe des Arrays, aber es ist die BASIS Ihrer Zahl – Basis 10 ist diejenige, die Sie am wahrscheinlichsten verwenden werden.

Die Funktion gibt einen Zeiger auf ihr zweites Argument zurück – wo sie die konvertierte Zeichenfolge gespeichert hat.

itoa ist eine sehr nützliche Funktion, die von einigen Compilern unterstützt wird – schade, dass sie im Gegensatz zu nicht von allen unterstützt wird atoi.

Wenn Sie noch verwenden möchten itoa, hier ist, wie Sie es verwenden sollten. Andernfalls haben Sie eine andere Option mit sprintf (solange Sie eine Ausgabe auf Basis 8, 10 oder 16 wünschen):

char str[5];
printf("15 in binary is %s\n",  itoa(15, str, 2));

Shamim Hafiz – Benutzeravatar von MSFT
Shamim Hafiz – MSFT

Verwenden Sie besser sprintf(),

char stringNum[20];
int num=100;
sprintf(stringNum,"%d",num);

Normalerweise snprintf() ist der Weg zu gehen:

char str[16]; // could be less but i'm too lazy to look for the actual the max length of an integer
snprintf(str, sizeof(str), "%d", your_integer);

Benutzeravatar von kenorb
kenorb

Sie können Ihre eigenen machen itoamit dieser Funktion:

void my_utoa(int dataIn, char* bffr, int radix){
int temp_dataIn;
temp_dataIn = dataIn;
int stringLen=1;

while ((int)temp_dataIn/radix != 0){
    temp_dataIn = (int)temp_dataIn/radix;
    stringLen++;
}
//printf("stringLen = %d\n", stringLen);
temp_dataIn = dataIn;
do{
    *(bffr+stringLen-1) = (temp_dataIn%radix)+'0';
    temp_dataIn = (int) temp_dataIn / radix;
}while(stringLen--);}

und das ist beispiel:

char buffer[33];
int main(){
  my_utoa(54321, buffer, 10);
  printf(buffer);
  printf("\n");

  my_utoa(13579, buffer, 10);
  printf(buffer);
  printf("\n");
}

Gewures Benutzeravatar
Gewure

void itos(int value, char* str, size_t size) {
    snprintf(str, size, "%d", value);
}

..arbeitet mit Aufruf durch Referenz. Verwenden Sie es wie folgt zB:

int someIntToParse;
char resultingString[length(someIntToParse)];

itos(someIntToParse, resultingString, length(someIntToParse));

jetzt resultingString wird Ihre C-‘Saite’ halten.

  • Dies funktioniert nur für die Konvertierung von Dezimalzahlen (Basis 10).

    – microMolvi

    24. August 2017 um 11:29 Uhr

1401480cookie-checkKonvertieren von int in string in C

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy