J’essaie de comprendre le code suivant, mais je suis confus entre “\ 0” et ‘\ 0’.
#define MAX_HISTORY 20 char *pStr = "\0"; for(x=0;x<MAX_HISTORY;x++){ str_temp = (char *)malloc((strlen(pStr)+1)*sizeof(char)); if (str_temp=='\0'){ return 1; } memset(str_temp, '\0', strlen(pStr) ); strcpy(str_temp, pStr);
Merci d’avance
Les guillemets doubles créent des littéraux de chaîne. Donc "\0"
est un littéral de chaîne contenant le caractère unique '\0'
, plus un second comme terminateur. C’est une façon idiote d’écrire une chaîne vide ( ""
est la manière idiomatique).
Les guillemets simples sont utilisés pour les littéraux de caractères. Par conséquent, '\0'
est une valeur de taille int
représentant le caractère avec la valeur de codage 0.
Nits dans le code:
malloc()
en C. sizeof (char)
, c’est toujours 1, cela n’ajoute donc aucune valeur. NULL
général. Ils sont différents.
"\0"
est un littéral de chaîne qui a deux 0 consécutifs et qui est à peu près équivalent à:
const char a[2] = { '\0', '\0' };
'\0'
est un int
de valeur 0. Vous pouvez toujours utiliser 0 partout où vous devez utiliser '\0'
.
\0
est le caractère de fin nul.
"\0"
est identique à {'\0', '\0'}
. C’est une chaîne écrite par un programmeur confus qui ne comprend pas que les littéraux de chaîne sont toujours automatiquement terminés par zéro. Le code correctement écrit aurait été ""
.
La ligne if (str_temp=='\0')
n’a pas de sens, elle aurait dû l’être if (str_temp==NULL)
. Or, comme cela se produit, \0
est équivalent à 0, ce qui est une constante de pointeur nulle. Le code fonctionne donc, par chance.
Prendre strlen
d’une chaîne où \0
est le premier caractère n’a pas beaucoup de sens. Vous obtiendrez une longueur de chaîne nulle.