Ich möchte eine Zeichenfolge in C in eine leere Zeichenfolge initialisieren. Ich habe es versucht:
string[0] = "";
aber es hat geschrieben
"warning: assignment makes integer from pointer without a cast"
Wie soll ich es denn machen?
maayan
Ich möchte eine Zeichenfolge in C in eine leere Zeichenfolge initialisieren. Ich habe es versucht:
string[0] = "";
aber es hat geschrieben
"warning: assignment makes integer from pointer without a cast"
Wie soll ich es denn machen?
Zusätzlich zur Version von Will Dean ist Folgendes für die Initialisierung des gesamten Puffers üblich:
char s[10] = {'\0'};
oder
char s[10];
memset(s, '\0', sizeof(s));
oder
char s[10];
strncpy(s, "", sizeof(s));
Vielen Dank 8 Jahre alte Antwort. Konnte nicht viel zur vollständigen Pufferinitialisierung finden.
– Parth Patel
30. November 2018 um 18:56 Uhr
Will Dekan
Sie möchten das erste Zeichen der Zeichenfolge wie folgt auf Null setzen:
char myString[10];
myString[0] = '\0';
(Oder myString[0] = 0;
)
Oder eigentlich können Sie bei der Initialisierung Folgendes tun:
char myString[10] = "";
Dies ist jedoch keine allgemeine Methode, um eine Zeichenfolge auf die Länge Null zu setzen, sobald sie definiert wurde.
char myString[1] = "";
sicherlich? Sie brauchen Platz für das Null-Terminator.
– JeremyP
10. November 2010 um 9:24 Uhr
Korrektur: Sie könnten tun char myString[10] = "";
– ruslik
10. November 2010 um 9:37 Uhr
@JeremyP: ""
steht für "\0"
also denke ich char myString[1]
reicht.
– Nan Xiao
14. September 2017 um 5:31 Uhr
@NanXiao Der Code sagte char myString[0] = "";
als ich den Kommentar geschrieben habe. Es wurde inzwischen korrigiert.
– JeremyP
18. September 2017 um 9:05 Uhr
Dachs
Angenommen, Ihr Array mit dem Namen “string” existiert bereits, versuchen Sie es
string[0] = '\0';
\0
ist der explizite NUL-Terminator, der erforderlich ist, um das Ende der Zeichenfolge zu markieren.
@badgerr: Würden Sie bitte Ihre Antwort ändern, um sie zu verwenden '\0'
?
– pevik
28. März 2017 um 8:36 Uhr
Das Zuweisen von Zeichenfolgenliteralen zu einem char-Array ist nur während der Deklaration zulässig:
char string[] = "";
Dies deklariert string als char-Array der Größe 1 und initialisiert es mit \0
.
Versuchen Sie dies auch:
char str1[] = "";
char str2[5] = "";
printf("%d, %d\n", sizeof(str1), sizeof(str2)); //prints 1, 5
calloc
weist den angeforderten Speicher zu und gibt einen Zeiger darauf zurück. Außerdem wird der zugewiesene Speicher auf Null gesetzt.
Falls Sie vorhaben, Ihre zu verwenden string
als leere Zeichenfolge die ganze Zeit:
char *string = NULL;
string = (char*)calloc(1, sizeof(char));
Falls Sie vorhaben, einen Wert in Ihrem zu speichern string
später:
char *string = NULL;
int numberOfChars = 50; // you can use as many as you need
string = (char*)calloc(numberOfChars + 1, sizeof(char));
Konkret
Um dies zu erreichen, können Sie Folgendes verwenden:
strcpy(string, "");
pmg
string[0] = "";
"warning: assignment makes integer from pointer without a cast
Ok, lass uns in den Ausdruck eintauchen …
0
ein int: stellt die Anzahl der Zeichen dar (vorausgesetzt string
ist (oder zerfällt in) ein char *), um vom Anfang des Objekts fortzuschreiten string
string[0]
: das char
Objekt, das sich am Anfang des Objekts befindet string
""
: Zeichenfolgenliteral: ein Objekt des Typs char[1]
=
: Zuweisungsoperator: versucht, einen Wert vom Typ zuzuweisen char[1]
zu einem Objekt des Typs char
. char[1]
(zerfallen zu char*
) und char
sind nicht zuweisungskompatibel, aber der Compiler vertraut Ihnen (dem Programmierer) und fährt trotzdem mit der Zuweisung fort, indem er den Typ umwandelt char*
(was char[1]
zerfallen zu) zu einem int
— und Sie erhalten die Warnung als Bonus. Du hast einen wirklich guten Compiler 🙂
Würde mehr Upvotes bekommen, wenn es eine Lösung gäbe; das ist aber eine gute Erklärung für das, was passiert.
– wizzwizz4
28. Dezember 2015 um 12:47 Uhr
Ich stimme @wizzwizz4 zu, aber ich mag meine Antwort so wie sie ist. Vielen Dank!
– pmg
28. Dezember 2015 um 13:18 Uhr
Was bringt es, eine Zeichenfolge mit 0 Zeichen zu deklarieren?
– CDhowie
10. November 2010 um 9:05 Uhr
Welcher Typ ist dein
string
? Ist es ein Char-Zeiger oder ein Char-Array?– Nr
10. November 2010 um 9:05 Uhr
@cdhowie: Es kann zum Beispiel ein nützlicher Sentinel-Wert sein.
– Oliver Charlesworth
10. November 2010 um 9:08 Uhr
Ach, falsch verstanden. “string” war eine zuvor definierte Variable. Ich dachte, das wäre eine Art seltsame fubare Variablendeklaration.
– CDhowie
10. November 2010 um 9:11 Uhr
gültige Frage @leppie Was ist String.
– Benutzer1011455
23. Mai 2012 um 6:55 Uhr