web-dev-qa-db-fra.com

Comment représenter le caractère vide?

J'écris actuellement un petit programme mais je continue à avoir cette erreur lors de la compilation

erreur: constante de caractère vide

Je réalise que c'est parce que j'essaie de remplacer un caractère valide par un espace vide c[i]='' mais je n'ai pas été en mesure de trouver un autre moyen de le représenter.

50
user2494770

Vous pouvez utiliser c[i]= '\0' ou simplement c[i] = (char) 0.

Le caractère nul/vide est simplement une valeur de zéro, mais peut également être représenté comme un caractère avec un zéro d'échappement.

83
ardent

Vous ne pouvez pas stocker "aucun personnage" dans un personnage - cela n'a aucun sens.

Vous pouvez également stocker un caractère qui a une signification particulière pour vous, par exemple. null char '\0' - et traitez-le spécialement.

19
occulus

Le caractère d'espace vide serait ' '. Si vous cherchez null, ce serait '\0'.

9
Claudiu

Oui, c[i]='' n'est pas un code valide. Nous maintenons la constante de caractère entre '', par exemple. c[i] = 'A'; char A. mais vous n'écrivez aucun caractère entre ''

L'espace vide n'est rien mais suppose que si vous voulez assigner de l'espace alors faites: 

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

si veut assigner nul char alors faites:

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

Exemple: Supposons si c[] une chaîne (nul \0 tableau de caractères terminé) si vous avez une chaîne. par exemple: 

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

Et vous remplacez le deuxième caractère par un espace

c[1] = ' ';

et si vous l’imprimez en utilisant printf comme suit: 

printf("\n c: %s", c);

alors la sortie serait:

  c:  a  c
//      ^ space printed 

Et vous remplacez le deuxième caractère par '\ 0'

c[1] = '\0';

alors la sortie serait:

  c:  a

parce que la chaîne s'est terminée par \0.

7
Grijesh Chauhan

Pour représenter le fait que la valeur n'est pas présente, vous avez deux choix:

1) Si la plage char entière est significative et que vous ne pouvez réserver aucune valeur, utilisez char* au lieu de 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

Alors vous aurez c[i] == NULL pour quand le caractère n'est pas présent et sinon *c[i] pour les caractères ordinaires.

2) Si vous n'avez pas besoin de valeurs représentables dans char, réservez-en une pour indiquer que la valeur n'est pas présente, par exemple le caractère '\0'.

char* c = new char[N];
c[0] = '\0'; // no character
c[1] = ' '; // ordinary character
c[2] = 'a'; // ordinary character

Alors vous aurez c[i] == '\0' pour quand le caractère n'est pas présent et les caractères ordinaires sinon.

4
BartoszKP

Il n’existe pas de "caractère vide" ''

Si vous avez besoin d'un caractère d'espacement, vous pouvez le représenter sous la forme d'un espace: c[i] = ' ' ou de son équivalent octal ASCII: c[i] = '\040'. Si vous avez besoin d'un caractère NUL qui est c[i] = '\0'

4
verbose

Il peut être utile d’attribuer une valeur null dans une chaîne plutôt que de définir explicitement un index comme caractère null '\0'. Je l'ai utilisé pour tester des fonctions qui gèrent les chaînes en s'assurant qu'elles restent dans les limites appropriées.

Avec:

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

Cela crée un tableau de taille 8 avec des valeurs:

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

Il y a deux façons de faire la même instruction, c'est-à-dire une chaîne vide. La première consiste à allouer une chaîne vide sur la mémoire statique:

char* my_variable = "";

ou, si vous voulez être explicite:

char my_variable = '\0';

La manière indiquée ci-dessus est uniquement pour un personnage ..__ Et, la deuxième façon:

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

N'oubliez pas d'utiliserfree ()avec celui-ci car strdup () usemallocinside.

0
Nick Cuevas