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

  FORUM HardWare.fr
  Programmation
  C

  Petite explication d'un code

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Petite explication d'un code

n°1620776
Almazard
Posté le 09-10-2007 à 00:25:23  profilanswer
 

Bonjour, je suis en train d'étudier une fonction qui  copie une chaine dans une autre en connaissant l'espace mémoire aloué, mais je ne comprend pas tout.  
Je n'ai pas compris ce qui est en gras, si qq pouvait me l'expliquer.
 
Merci beaucoup d'avance.
 
char      *my_strncpy(char *dest, char *src, unsigned int size)
{
  char   *ret;
   
  ret = dest;
  while (size--)
    {
     if (*src)
 *(dest++) = *(src++);
      else
 *(dest++) = 0;

    }
  return (ret);
}

mood
Publicité
Posté le 09-10-2007 à 00:25:23  profilanswer
 

n°1620777
Olivier51
Posté le 09-10-2007 à 00:27:29  profilanswer
 

- Sais-tu ce que veut dire dest++ ?
- Sais-tu ce que veut dire (*src) ?

n°1620778
Almazard
Posté le 09-10-2007 à 00:29:32  profilanswer
 

-Dest++ :  on incrémente de 1
- *src : c'est un pointeur sur src

n°1620795
Joel F
Real men use unique_ptr
Posté le 09-10-2007 à 08:45:11  profilanswer
 

he ho :
 
*src = déréférencement de pointeur, on accede au CONTENU de l'espace mémoire dont l'adresse est dans src.  
 
if(*src) /* on teste si le contenu de l'espace mémoire pointé par src est non nul, ici cela corespondrait à la fin de la chaine de caractéres */
 
*(dest++) : on incrémente dest et on renvoit ca vieille valeur. Comem c'ets un pointeur, on déréférence pour récupérer l'espace mémoire pointée.
 
-----
 
Aprés, quelques remarques :
-return est mot-clé pas une fonction, donc pas besoin de ces parenthèses moches.
- rassure moi que tu es en 1e année en école d'info ou à la fac et que cela fait partie du chapitre 0 du cours de C et que tu n'es pas en train de recoder strncpy pour un vrai projet.
 

n°1621155
Almazard
Posté le 09-10-2007 à 15:54:43  profilanswer
 

Oui c'est dans le chapitre 0 du C.
 
Mais je ne comprend pas par exemple quand j'ai ça:
 
while (*str++)
 
Par quoi on peut remplacer srt++ ? Je ne vois pas ce qe cela représente avec des connecteurs logiques ?

n°1621185
Joel F
Real men use unique_ptr
Posté le 09-10-2007 à 16:16:45  profilanswer
 

while (*str++)  
{  
  /* trucs*/  
}
 
est équivalent à :
 
while (*str)  
{  
  str++;
  /* trucs*/  
 
}

n°1621252
olivthill
Posté le 09-10-2007 à 17:21:39  profilanswer
 

Pour être complet, on pourrait rapeler que str++ est éqivalent à str = str + 1, et rappeler que while (*str++) est équivalent à while ((*str++) != 0) et if (*src) est équivalent à if ((*src) != 0) car la condition est fausse si l'évaluation de l'expression donne zéro.
 
while (size--) signifie, tant que la variable "size" (pas terrible comme nom de variable, car "size" ressemble à un mot réservé) contient une valeur non nulle, puis décrémentation après le test de la condition.
 

n°1621260
Almazard
Posté le 09-10-2007 à 17:32:38  profilanswer
 

Joel F :
 
while (*str)  <-- Est-ce la même chose que (*str < 0) ?
{  
  str++;
  /* trucs*/  
 
}
 
-----------------------
 
while(Size --)
 
 est égal à =
 
while(Size > 0)
{
   /*truc;*/
   Size--;
 
Correct ?

n°1621293
Emmanuel D​elahaye
C is a sharp tool
Posté le 09-10-2007 à 18:07:26  profilanswer
 

Almazard a écrit :

Joel F :

Code :
  1. while (*str)  <-- Est-ce la même chose que (*str < 0) ?
  2.   str++;
  3.   /* trucs*/ 
  4. }



Non. C'est la même chose que (*str != 0)

 

(Rappel : 0 est le caractère de fin de chaine).

Citation :


while(Size --)
 
 est égal à =

 

while(Size > 0)
{
   /*truc;*/
   Size--;

 

Correct ?


Oui, si Size est un entier ou un réel.


Message édité par Emmanuel Delahaye le 09-10-2007 à 18:39:15

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1621294
dwogsi
Défaillance cérébrale...
Posté le 09-10-2007 à 18:10:05  profilanswer
 

Si on part du principe que Size à une valeur positive.
Sinon c'est pas vraiment équivalent à while(Size > 0) .
Non?


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
mood
Publicité
Posté le 09-10-2007 à 18:10:05  profilanswer
 

n°1621304
Ace17
Posté le 09-10-2007 à 19:10:00  profilanswer
 

Joel F a écrit :

while (*str++)  
{  
  /* trucs*/  
}
 
est équivalent à :
 
while (*str)  
{  
  str++;
  /* trucs*/  
 
}


 
Pas d'accord. En sortie de boucle, str pointe un cran plus loin dans la version du haut.

n°1621313
Joel F
Real men use unique_ptr
Posté le 09-10-2007 à 19:42:35  profilanswer
 

certes j'était mal réveillé :o


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

  Petite explication d'un code

 

Sujets relatifs
ajouter _blank a mon code ..Problème COMPILATION Code::Block
GDB: comment tracer pas a pas dans le code machine?petite question sur le foreach
Code de de réduction image auto en HTMLProblème Compilation avec Code::Block
Modifier les associations de fichiers par le code ?Code calendrier automatique en VBA
Éviter la dupplication de codeLogiciel de référence croisée pour du code C
Plus de sujets relatifs à : Petite explication d'un code


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