Que signifie chaine[i]='\0';

Que signifie chaine[i]='\0'; - C - Programmation

Marsh Posté le 26-04-2012 à 17:21:28    

Bonjour,
 
Je n'arrive pas à comprendre le sens de ce code :
 

Code :
  1. chaine[i]='*';
  2. chaine[i]='\0';


 
Je retrouve la même composition ici :

Code :
  1. chaine[strlen(chaine) - 1] = '\0';


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

Reply

Marsh Posté le 26-04-2012 à 17:21:28   

Reply

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+,

Message cité 1 fois
Message édité par gilou le 26-04-2012 à 19:09:39

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 26-04-2012 à 18:40:31    

gilou a écrit :


Par définition, on a: chaine[strlen(chaine)] ==  '\0' et chaine[strlen(i)] != '\0' pour 0 <= i < strlen(chaine)


 :heink:  

Code :
  1. chaine[i] != '\0' pour 0 <= i < strlen(chaine)

plutôt


---------------
Seul Google le sait...
Reply

Marsh Posté le 26-04-2012 à 18:55:05    

[:bidibulle:2] je trouve toujours ca perplexifiant de foutre un '\0' plutôt que 0. C'est carrément glucose.


---------------
last.fm
Reply

Marsh Posté le 26-04-2012 à 19:10:11    

breizhbugs a écrit :


 :heink:  

Code :
  1. chaine[i] != '\0' pour 0 <= i < strlen(chaine)

plutôt

Oups, le copier-coller mal édité m'a eu :/
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 26-04-2012 à 19:11:39    

theshockwave a écrit :

[:bidibulle:2] 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+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

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!

Reply

Marsh Posté le 26-04-2012 à 19:21:42    

theshockwave a écrit :

[:bidibulle:2] 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"...


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

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'
Merci!


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 :
  1. char *pt;
  2. if ((pt=strrchr(chaine, '\n')) != NULL) *pt='\0';


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...

Message cité 1 fois
Message édité par Sve@r le 29-04-2012 à 17:14:17

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 29-04-2012 à 22:40:49    

Sve@r a écrit :


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'..


Sauf si il sait toutes les chaines se terminent par \n  


---------------
sheep++
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed