Ich schreibe gerade ein kleines Programm, aber beim Kompilieren wird dieser Fehler immer wieder angezeigt
Fehler: leere Zeichenkonstante
Mir ist klar, dass ich versuche, ein gültiges Zeichen durch ein leeres Leerzeichen zu ersetzen, c[i]=''
aber ich konnte keinen anderen Weg finden, es darzustellen.
c[i]
ein Leerzeichen ersetzen oder möchten Sie dieses Zeichen aus dem Array "entfernen", wie Sie es in einem Editor tun würden, wenn Sie die Rücktaste drücken (dh möchten Sie die Zeichen c [i-1] und c [)? i + 1] nach der Operation benachbart werden)?char c[5] = "";
leere Zeichenfolge zuweisen , diesechar c = '';
ist jedoch nicht gültig, wie unten in 6 Antworten erläutert.Antworten:
Sie können verwenden
c[i]= '\0'
oder einfachc[i] = (char) 0
.Das Null- / Leerzeichen ist einfach ein Wert von Null, kann aber auch als Zeichen mit einer maskierten Null dargestellt werden.
quelle
'\0'
ist das Nullzeichen, das nichts damit zu tun hatNULL
; Das Nullzeichen ist einfach ein Zeichen mit 0 als numerischem Code.null char
sollte esnul char
Single seinl
.Sie können "kein Zeichen" nicht in einem Zeichen speichern - es macht keinen Sinn.
Alternativ können Sie ein Zeichen speichern, das für Sie eine besondere Bedeutung hat - z. B. null Zeichen
'\0'
- und dies speziell behandeln.quelle
""
da eine Zeichenfolge eine Folge von null oder mehr Zeichen ist, ein Zeichen jedoch genau ein Wert ist - nicht null und nicht mehr.Das Leerzeichen wäre
' '
. Wenn Sie nach Null suchen, wäre das'\0'
.quelle
Ja,
c[i]=''
ist kein gültiger Code. Wir klammern die Zeichenkonstante zwischen'
'
, z . B.c[i] = 'A';
charA
. aber du schreibst kein Zeichen dazwischen''
.Leerer Speicherplatz ist nichts anderes als angenommen, wenn Sie Speicherplatz zuweisen möchten, gehen Sie wie folgt vor:
c[i] = ' '; // ^ space
Wenn Sie zugewiesen werden
nul char
möchten, tun Sie Folgendes:c[i] = '\0'; // ^ null symbol
Beispiel: Angenommen,
c[]
eine Zeichenfolge (kein\0
terminiertes Zeichenarray), wenn Sie eine Zeichenfolge haben. zum Beispiel:char c[10] = {'a', '2', 'c', '\0'};
Und Sie ersetzen das zweite Zeichen durch 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 Sie ersetzen das zweite Zeichen durch '\ 0' :
c[1] = '\0';
dann wäre die Ausgabe:
weil Zeichenfolge mit beendet
\0
.quelle
Es gibt kein "leeres Zeichen"
''
.Wenn Sie ein Leerzeichen benötigen, kann dieses als Leerzeichen
c[i] = ' '
oder als oktales ASCII-Äquivalent dargestellt werden :c[i] = '\040'
. Wenn Sie einen NUL-Charakter benötigen, ist dasc[i] = '\0'
.quelle
Um die Tatsache darzustellen, dass der Wert nicht vorhanden ist, haben Sie zwei Möglichkeiten:
1) Wenn der gesamte
char
Bereich aussagekräftig ist und Sie keinen Wert reservieren können, verwenden Siechar*
anstelle vonchar
: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 Zeichen nicht vorhanden ist und ansonsten*c[i]
für gewöhnliche Zeichen.2) Wenn Sie einige Werte nicht benötigen, die in dargestellt werden können,
char
reservieren Sie einen, um anzuzeigen, dass der Wert nicht vorhanden ist, z. B. das'\0'
Zeichen.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 Zeichen nicht vorhanden ist und gewöhnliche Zeichen sonst.quelle
Es gibt zwei Möglichkeiten, dieselbe Anweisung auszuführen, dh eine leere Zeichenfolge. Die erste Möglichkeit besteht darin, eine leere Zeichenfolge im statischen Speicher zuzuweisen:
char* my_variable = "";
oder, wenn Sie explizit sein möchten:
char my_variable = '\0';
Der oben angegebene Weg gilt nur für einen Charakter. Und der zweite Weg:
#include <string.h> char* my_variable = strdup("");
Vergessen Sie nicht , verwenden free () mit diesem einen , weil strdup () Verwendung malloc innen.
quelle
Es kann nützlich sein, eine Null in einer Zeichenfolge zuzuweisen, anstatt einen Index explizit zum Nullzeichen zu machen
'\0'
. Ich habe dies zum Testen von Funktionen verwendet, die Zeichenfolgen verarbeiten, um sicherzustellen, dass sie innerhalb der entsprechenden Grenzen bleiben.Mit:
char test_src[] = "fuu\0foo";
Dadurch wird ein Array der Größe 8 mit folgenden Werten erstellt:
{'f', 'u', 'u', '\0', 'f', 'o', 'o', '\0'}
quelle
Wobei EMPTY_SPACE = "" (dies ist String) TAB = '\ t' (dies ist Character)String before = EMPTY_SPACE+TAB+"word"+TAB+EMPTY_SPACE;
String after = before.replaceAll(" ", "").replace('\t', '\0');
bedeutet nach = "Wort"quelle