Définition d'une chaîne de valeur null en C
Paramètre est une chaîne '\0' la même chose comme paramètre une chaîne de caractères NULL dans d'autres langues?
Ou... est-ce que fixer une chaîne '\0' signifie que la chaîne est tout simplement vide?
char* str = 'char* str = '\0'
'
J'ai différentes fonctions à utiliser pour les nuls les chaînes et les cordes à vide, donc je ne veux pas accidentelle appeler un de mes vides fonctions de chaîne sur une chaîne nulle.
C'est une bonne pratique pour attacher la
*
de caractères pour le nom de la variable au lieu de le type de nom afin d'éviter toute confusion. Envisager char* p1, p2;
. Ceci définit un pointeur vers char p1 et de p2, mais il se lit comme si les deux p1 et p2 ont été de type pointeur vers char.OriginalL'auteur gegardmoussasi | 2011-04-09
Vous devez vous connecter pour publier un commentaire.
Votre ligne
char *str = '\0';
fait NE jeu de str (l'équivalent de) NULLE. C'est parce que'\0'
dans C est un nombre entier avec la valeur 0, ce qui est une valeur de pointeur null constante. Il est extrêmement obscure 🙂Faire
str
(un pointeur), une chaîne vide est fait avecstr = "";
(ou avecstr = "\0";
, qui fera str pointer vers un tableau de deux zéro octets).Remarque: ne confondez pas votre déclaration avec la déclaration en ligne 3
qui fait quelque chose de totalement différent: il définit le premier caractère de la chaîne qui
str
points à zéro octet, ce qui fait destr
point à la chaîne vide.Terminologie pinaille: les chaînes ne peuvent pas être NULL; une chaîne C est un tableau de caractères qui a un caractère NUL quelque part. Sans NUL personnage, c'est juste un tableau de caractères et ne doit pas être transmis à des fonctions attend (pointeurs) des chaînes de caractères.
Les pointeurs, cependant, sont les seuls objets en C qui peut être NULL.
Et ne confondez pas le NUL de la macro avec le NUL de caractère 🙂
Oui, mais vous avez à faire une distinction entre, d'une déclaration
char *str = '\0';
et la déclaration*str = '\0';
. Ils font des choses très différentes.désolé, brainfart. J'ai lu
*str='\0'
au lieu dechar * str='\0'
. Tu as mon +1 🙂pas trop grave; il était facile de confondre les guillemets simples et doubles et j'ai dû utiliser mes yeux d'aigle 🙂 Merci pour le vote, je l'apprécie.
Non, cela ne fonctionne pas, parce que
s
n'est pas initialisé. Il se dirige à pas de mémoire. Vous auriez besoin de quelque chose commes = malloc(42); strcpy (s, src);
.OriginalL'auteur Jens
Pas, dans ce cas, vous êtes pointant vers une vraie (non nulle) de chaîne d'une longueur de 0. Vous pouvez simplement faire ce qui suit pour le mettre en réelle nulle:
"\0"
, alors il le ferait.Ahhh. Stupide entre guillemets simples. Bon appel!
Selon la accepté de répondre, ce serait "un tableau de deux zéro octets."
Euh? Aussi c'est toujours une chaîne de longueur zéro, parce que stupide C les chaînes sont NUL terminée.
OriginalL'auteur Chris Eberle