it-swarm.com.de

Wie stellt man das leere Zeichen dar?

Ich schreibe gerade ein kleines Programm, aber ich bekomme diesen Fehler beim Kompilieren immer wieder

fehler: leere Zeichenkonstante

Ich weiß, es liegt daran, dass ich versuche, ein gültiges Zeichen durch ein leeres Leerzeichen c[i]='' zu ersetzen, aber ich habe keine andere Möglichkeit gefunden, es darzustellen.

50
user2494770

Sie können c[i]= '\0' oder einfach c[i] = (char) 0 verwenden.

Das leere Zeichen ist einfach ein Wert von Null, kann aber auch als Zeichen mit einer Escape-Null dargestellt werden.

83
ardent

Sie können "keinen Charakter" in einem Charakter nicht speichern - es macht keinen Sinn.

Alternativ können Sie ein Zeichen speichern, das für Sie eine besondere Bedeutung hat - z. null char '\0' - und besonders behandeln.

19
occulus

Das leere Leerzeichen wäre ' '. Wenn Sie nach Null suchen, wäre dies '\0'.

9
Claudiu

Ja, c[i]='' ist kein gültiger Code. Wir sind eine Zeichenkonstante zwischen '', z. c[i] = 'A'; char A. Sie schreiben jedoch kein Zeichen ''

Leerer Speicherplatz ist nichts anderes als angenommen, wenn Sie Speicherplatz zuweisen möchten, tun Sie Folgendes: 

c[i] = ' ';
//      ^  space 

wenn nul char zugewiesen werden soll, dann mache:

c[i] = '\0';
//       ^ null symbol 

Beispiel: Angenommen, c[] eine Zeichenfolge (nul \0 terminiertes Char-Array), wenn Sie eine Zeichenfolge haben. zum Beispiel: 

char c[10] = {'a', '2', 'c', '\0'};

Und Sie ersetzen Sie 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 du ersetze das zweite Zeichen durch '\ 0'

c[1] = '\0';

dann wäre die Ausgabe:

  c:  a

weil die Zeichenfolge mit \0 beendet wurde.

7
Grijesh Chauhan

Um die Tatsache darzustellen, dass der Wert nicht vorhanden ist, haben Sie zwei Möglichkeiten:

1) Wenn der gesamte char-Bereich sinnvoll ist und Sie keinen Wert reservieren können, verwenden Sie char* anstelle 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 den Fall, dass ein Zeichen nicht vorhanden ist, und sonst *c[i] für gewöhnliche Zeichen.

2) Wenn Sie keine Werte benötigen, die in char dargestellt werden können, reservieren Sie einen, um anzuzeigen, dass der Wert nicht vorhanden ist, beispielsweise das Zeichen '\0'.

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 den Fall, dass ein Zeichen nicht vorhanden ist, und normale Zeichen sonst.

4
BartoszKP

Es gibt kein "leeres Zeichen" ''

Wenn Sie ein Leerzeichen benötigen, kann dieses als Leerzeichen dargestellt werden: c[i] = ' ' oder als oktales Äquivalent ASCII: c[i] = '\040'. Wenn Sie ein NUL-Zeichen benötigen, ist dies c[i] = '\0'

4
verbose

Es kann nützlich sein, eine Null in einer Zeichenfolge zuzuweisen, anstatt einen bestimmten Index explizit zu dem Nullzeichen '\0' zu machen. Ich habe dies zum Testen von Funktionen verwendet, die mit Strings umgehen, um sicherzustellen, dass sie innerhalb der entsprechenden Grenzen bleiben.

Mit:

char test_src[] = "fuu\0foo";

Dadurch wird ein Array der Größe 8 mit Werten erstellt:

{'f', 'u', 'u', '\0', 'f', 'o', 'o', '\0'}
1
Kyle s

Es gibt zwei Möglichkeiten, dieselbe Anweisung auszuführen, dh eine leere Zeichenfolge. Die erste Möglichkeit ist, einen leeren String im statischen Speicher zuzuweisen:

char* my_variable = "";

oder, wenn Sie explizit sein wollen:

char my_variable = '\0';

Der oben angegebene Weg ist nur für einen Charakter ..__ und der zweite Weg:

#include <string.h>
char* my_variable = strdup("");

Vergessen Sie nicht,free ()mit diesem zu verwenden, da strdup () usemallocinnerhalb ist.

0
Nick Cuevas