Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2237 connectés 

  FORUM HardWare.fr
  Programmation
  C

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2139272
caps lock
Posté le 26-04-2012 à 17:21:28  profilanswer
 

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

mood
Publicité
Posté le 26-04-2012 à 17:21:28  profilanswer
 

n°2139284
gilou
Modérateur
Modzilla
Posté le 26-04-2012 à 17:58:28  profilanswer
 

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é!  --
n°2139293
breizhbugs
Posté le 26-04-2012 à 18:40:31  profilanswer
 

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...
n°2139296
theshockwa​ve
I work at a firm named Koslow
Posté le 26-04-2012 à 18:55:05  profilanswer
 

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


---------------
last.fm
n°2139298
gilou
Modérateur
Modzilla
Posté le 26-04-2012 à 19:10:11  profilanswer
 

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é!  --
n°2139299
gilou
Modérateur
Modzilla
Posté le 26-04-2012 à 19:11:39  profilanswer
 

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é!  --
n°2139300
caps lock
Posté le 26-04-2012 à 19:14:31  profilanswer
 

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!

n°2139303
el muchach​o
Comfortably Numb
Posté le 26-04-2012 à 19:21:42  profilanswer
 

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
n°2139692
Sve@r
Posté le 29-04-2012 à 17:10:10  profilanswer
 

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.
n°2139709
h3bus
Troll Inside
Posté le 29-04-2012 à 22:40:49  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

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

 

Sujets relatifs
Trouver une URL dans une chaineméthode en java qui permet de séléctionner une chaine dans un tableau
tableau de chaine de caractère : enregistrement[Débutant] Module Turtle et Tkinter
Recherche occurence dans une chaîneDécoupage chaine de caractère
Communication socketEnvoie d'une chaine de caractère
Macro Word recherche chaine avec retour a la ligneEnvoie de chaine de caractére
Plus de sujets relatifs à : Que signifie chaine[i]='\0';


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR