Ich schreibe gerade ein kleines Programm, aber ich bekomme immer diesen Fehler beim Kompilieren
Fehler: leere Zeichenkonstante
Mir ist klar, dass es daran liegt, dass ich versuche, ein gültiges Zeichen durch Leerzeichen zu ersetzen c[i]='' aber ich bin nicht im Stande gewesen, einen anderen Weg zu finden, es darzustellen.
Es gibt kein “leeres Leerzeichen” (falsche Terminologie), obwohl es eine leere Zeichenkette geben kann. Willst du ersetzen c[i] mit einer Leerstelleoder möchten Sie dieses Zeichen aus dem Array “eliminieren”, wie Sie es in einem Editor tun würden, wenn Sie die Rücktaste drücken (dh möchten Sie, dass die Zeichen c[i-1] und C[i+1] nach der Operation angrenzend werden)?
– Lorenzo Donati unterstützt die Ukraine
23. August 2013 um 19:26 Uhr
Wenn Sie Zeichenfolgen verstehen, können Sie sie zum Zeitpunkt der Deklaration als zuweisen char c[5] = ""; leere Zeichenfolge aber char c = ''; ist nicht gültig, wie unten in 6 Antworten erklärt.
– Grijesh Chauhan
23. August 2013 um 19:34 Uhr
leidenschaftlich
Sie können verwenden c[i]= '\0' oder einfach c[i] = (char) 0.
Das null/leere Zeichen ist einfach ein Wert von Null, kann aber auch als Zeichen mit einer Escape-Null dargestellt werden.
Ja, und es gibt kein “leeres Zeichen”. '\0' ist der Nullzeichen was nichts damit zu tun hat NULL; Das Nullzeichen ist einfach ein Zeichen mit 0 als numerischem Code.
– Lorenzo Donati unterstützt die Ukraine
23. August 2013 um 19:30 Uhr
@LorenzoDonati Ja, ich habe mich entschieden, es zu entfernen, da es dieser Antwort nichts hinzufügt und für die vorliegende Diskussion aus dem Kontext gerissen zu sein scheint.
– leidenschaftlich
23. August 2013 um 19:40 Uhr
@GrijeshChauhan wird als Nullzeichen oder Null-Endzeichen bezeichnet, wird jedoch als abgekürzt nul. Sehen tools.ietf.org/html/rfc20#section-5.2. Es wird auch im ANSI-C-Standard als Nullzeichen bezeichnet.
– leidenschaftlich
23. August 2013 um 20:17 Uhr
@GrijeshChauhan und Ardentsonata Für eine genauere Bezugnahme definiert der C99-Standardentwurf (N1256) diesen Begriff in Abschnitt 5.2.1 (Zeichensätze), Absatz 2: “[…]Ein Byte, bei dem alle Bits auf 0 gesetzt sind, genannt Nullzeichen, muss im grundlegenden Ausführungszeichensatz vorhanden sein; es wird verwendet, um eine Zeichenfolge abzuschließen.” Die C/C++-Terminologie ist immer ein bisschen albtraumhaft 😉
– Lorenzo Donati unterstützt die Ukraine
23. August 2013 um 21:07 Uhr
Es gibt kein leeres Zeichen. Das Nullzeichen als leeres Zeichen zu bezeichnen, ist einfach falsch.
– Christoffer Hammarström
25. Juni 2015 um 10:01 Uhr
Sie können “kein Zeichen” nicht in einem Zeichen speichern – es macht keinen Sinn.
Alternativ können Sie auch ein Zeichen hinterlegen, das für Sie eine besondere Bedeutung hat – zB null char '\0' – und diese besonders behandeln.
Ich denke, das ist eine viel bessere Antwort als die akzeptierte, die null char und empty char verwechselt. Als Analogie ist es so, als würde man sagen, dass man kein int deklarieren und „keine Zahl“ speichern kann – man muss speichern etwas Wert.
– Simonwo
13. Mai 2015 um 9:42 Uhr
Sie können eine Nullzeichenfolge haben "" weil eine Zeichenfolge eine Folge von null oder mehr Zeichen ist, aber ein Zeichen genau ein Wert ist – nicht null und nicht mehr.
– Simonwo
13. Mai 2015 um 9:42 Uhr
Das Leerzeichen wäre ' '. Wenn Sie nach null suchen, wäre das '\0'.
Grijesh Chauhan
Ja, c[i]='' ist kein gültiger Code. Wir klammern Zeichen konstant zwischen ''z.B c[i] = 'A'; verkohlen A. aber du schreibst kein char dazwischen ''.
Leerer Speicherplatz ist nichts anderes als angenommen, wenn Sie Speicherplatz zuweisen möchten, tun Sie Folgendes:
c[i] = ' ';
// ^ space
wenn zugeteilt werden will nul char dann mach:
c[i] = '\0';
// ^ null symbol
Beispiel: Angenommen, wenn c[] eine Zeichenfolge (null \0 beendetes Char-Array), wenn Sie eine Zeichenfolge haben. zum Beispiel:
char c[10] = {'a', '2', 'c', '\0'};
Und du Ersetzen Sie das zweite Zeichen durch ein Leerzeichen:
c[1] = ' ';
und wenn Sie es mit printf wie folgt drucken:
printf("\n c: %s", c);
dann wäre die Ausgabe:
c: a c
// ^ space printed
Und du zweites Zeichen durch ‘\0’ ersetzen:
c[1] = '\0';
dann wäre die Ausgabe:
c: a
weil string mit endete \0.
Es gibt kein “leeres Zeichen” ''.
Wenn Sie ein Leerzeichen benötigen, kann dies als Leerzeichen dargestellt werden: c[i] = ' ' oder als ASCII-Oktaläquivalent: c[i] = '\040'. Wenn Sie ein NUL-Zeichen benötigen, ist das c[i] = '\0'.
Um darzustellen, dass der Wert nicht vorhanden ist, haben Sie zwei Möglichkeiten:
1) Wenn das Ganze char Bereich sinnvoll ist und Sie keinen Wert reservieren können, dann verwenden char* Anstatt von char:
char** c = new char*[N];
c[0] = NULL; // no character
*c[1] = ' '; // ordinary character
*c[2] = 'a'; // ordinary character
*c[3] = '\0' // zero-code character
Dann haben Sie c[i] == NULL für wenn Charakter nicht vorhanden ist und sonst *c[i] für gewöhnliche Charaktere.
2) Wenn Sie einige darstellbare Werte nicht benötigen char Reservieren Sie dann einen, um anzuzeigen, dass kein Wert vorhanden ist, z. B. der '\0' Charakter.
char* c = new char[N];
c[0] = '\0'; // no character
c[1] = ' '; // ordinary character
c[2] = 'a'; // ordinary character
Dann haben Sie c[i] == '\0' für wenn kein Zeichen vorhanden ist und ansonsten gewöhnliche Zeichen.
Nick Cuevas
Es gibt zwei Möglichkeiten, dieselbe Anweisung auszuführen, dh eine leere Zeichenfolge. Die erste Möglichkeit besteht darin, einen leeren String im statischen Speicher zuzuweisen:
char* my_variable = "";
oder, wenn es explizit sein soll:
char my_variable="\0";
Der oben gepostete Weg ist nur für einen Charakter. Und der zweite Weg:
Es gibt kein “leeres Leerzeichen” (falsche Terminologie), obwohl es eine leere Zeichenkette geben kann. Willst du ersetzen
c[i]
mit einer Leerstelleoder möchten Sie dieses Zeichen aus dem Array “eliminieren”, wie Sie es in einem Editor tun würden, wenn Sie die Rücktaste drücken (dh möchten Sie, dass die Zeichen c[i-1] und C[i+1] nach der Operation angrenzend werden)?– Lorenzo Donati unterstützt die Ukraine
23. August 2013 um 19:26 Uhr
Wenn Sie Zeichenfolgen verstehen, können Sie sie zum Zeitpunkt der Deklaration als zuweisen
char c[5] = "";
leere Zeichenfolge aberchar c = '';
ist nicht gültig, wie unten in 6 Antworten erklärt.– Grijesh Chauhan
23. August 2013 um 19:34 Uhr