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.
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.
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.
Le caractère d'espace vide serait ' '
. Si vous cherchez null, ce serait '\0'
.
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
.
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.
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'
.
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'}
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.