Que signifie chaine[i]='\0'; - C - Programmation
Marsh Posté le 26-04-2012 à 17:58:28
Citation : chaine[strlen(chaine) - 1] = '\0'; |
ce code enlève le dernier caractère de la chaine.
'\0' est le marqueur de fin de chaine.
Par définition, on a: chaine[strlen(chaine)] == '\0' et chaine[i] != '\0' pour 0 <= i < strlen(chaine)
C'est à dire que strlen renvoie la première position à partir de chaine[0] ou il y a un '\0'.
Ici, en faisant chaine[strlen(chaine) - 1] = '\0' on remplace le dernier caractère de la chaine par la marque de fin de chaine.
Concrètement, tout se passe comme si on réduisait la chaine d'un caractère à partir de la fin.
A+,
Marsh Posté le 26-04-2012 à 18:40:31
gilou a écrit : |
Code :
|
plutôt
Marsh Posté le 26-04-2012 à 19:10:11
breizhbugs a écrit :
plutôt |
Oups, le copier-coller mal édité m'a eu
A+,
Marsh Posté le 26-04-2012 à 19:11:39
theshockwave a écrit : je trouve toujours ca perplexifiant de foutre un '\0' plutôt que 0. C'est carrément glucose. |
C'est pour bien faire apparaître l'aspect char de la chose.
A+,
Marsh Posté le 26-04-2012 à 19:14:31
Ok merci pour l'explication, dans mon exemple la chaine est constitué d'un mot et donc le code a pour vocation de supprimer le '\n'
Merci!
Marsh Posté le 26-04-2012 à 19:21:42
theshockwave a écrit : je trouve toujours ca perplexifiant de foutre un '\0' plutôt que 0. C'est carrément glucose. |
C'est d'ailleurs l'un des plus mémorables bugs que j'ai fait en C: j'avais écrit "\0"...
Marsh Posté le 29-04-2012 à 17:10:10
caps lock a écrit : Ok merci pour l'explication, dans mon exemple la chaine est constitué d'un mot et donc le code a pour vocation de supprimer le '\n' |
Alors ce code est bien bancal. Parce qu'en fait il vire le dernier caractère même si celui-ci n'est pas un '\n'..
Code :
|
strrchr() recherche un caractère particulier dans une chaine en partant de la fin. S'il le trouve, il renvoie l'adresse de l'octet contenant ce caractère. Sinon il renvoie NULL.
Donc ici si l'adresse renvoyée n'est pas NULL, c'est que le '\n' se trouve à cette adresse. Et à cet endroit précis j'y mets un '\0' pour fermer la chaine...
Marsh Posté le 29-04-2012 à 22:40:49
Sve@r a écrit : |
Sauf si il sait toutes les chaines se terminent par \n
Marsh Posté le 26-04-2012 à 17:21:28
Bonjour,
Je n'arrive pas à comprendre le sens de ce code :
Je retrouve la même composition ici :
On retire 1 à la longueur de la chaine, mais que signifie ce " = '\0' " ?
Je sais que le signe '\0' est utilisé pour fermer une chaine