105 votes

Comment représente-t-on le char vide ?

Je suis en train d'écrire un petit programme mais je continue à obtenir 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 réussi à trouver une autre façon de le représenter.

4voto

BartoszKP Points 14131

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

1) Si l'ensemble char est significative et que vous ne pouvez réserver aucune valeur, utilisez alors 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 lorsque 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 certaines valeurs représentables en char puis en réserver un pour indiquer que la valeur n'est pas présente, par exemple l'option '\0' caractère.

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 lorsque le caractère n'est pas présent et des caractères ordinaires sinon.

4voto

Nick Cuevas Points 356

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

char* my_variable = "";

ou, si vous voulez être explicite :

char my_variable = '\0';

La méthode affichée ci-dessus ne concerne qu'un personnage. Et, la deuxième façon :

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

N'oubliez pas d'utiliser libre() avec celui-ci parce que strdup() utiliser malloc à l'intérieur.

2voto

Kyle s Points 374

Il peut être utile d'assigner un null dans une chaîne de caractères plutôt que de faire explicitement d'un index le null char. '\0' . Je l'ai utilisé pour tester des fonctions qui manipulent des chaînes de caractères en m'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'}

0voto

Stefanidis Points 41

String before = EMPTY_SPACE+TAB+"word"+TAB+EMPTY_SPACE;

Où EMPTY_SPACE = " " (ceci est une chaîne) TAB = ' \t (c'est un caractère)

String after = before.replaceAll(" ", "").replace('\t', '\0');

signifie après = " mot ".

0voto

Mr. Beeblebrox Points 1

Il s'agit d'un cas où les guillemets simples et les guillemets doubles ont des significations différentes.

"" est traduit en (const char[1])"" par le compilateur. Cela vous permet de l'utiliser dans les initialisations de tableaux de caractères.

'' ne l'est pas, et serait une chaîne vide non terminée. Comme vous ne pouvez pas savoir si une chaîne est vide sans la terminer, ce n'est pas un code valide. D'où l'erreur.

Vous avez certainement voulu faire

c[i] = '\0';

Si c était en effet une chaîne de texte, ceci fixe la longueur de la chaîne à i en la terminant sur ce caractère.

Si c n'était pas réellement prévu comme une chaîne de texte, c'est toujours la valeur que vous êtes censé utiliser pour signifier qu'il n'y a rien, parce que c'est faux, et tout autre caractère est vrai.

Si tu voulais vraiment mettre un espace ici, alors tu voulais

c[i] = ' ';

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X