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

  FORUM HardWare.fr
  Programmation
  C

  [C / GNU] petit doute sur strncpy

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C / GNU] petit doute sur strncpy

n°459825
Deadog
Dain Bramaged
Posté le 17-07-2003 à 01:59:18  profilanswer
 

après plusieurs segfault bizarre je viens de lire ça dans la page man de strncpy :
 
La fonction strncpy() est identique, sauf que seuls les n premiers octets de src sont copiés. Ainsi, s'il n'y a pas de caractère nul dans les n premiers octets de src, la chaîne résultante ne disposera de caractère nul final.
 
:/
 
dans mon cas j'avais une zone mémoire alloué de 2 octets :
strncpy(buf, "q", 1);
(je précise ke la je vous met des arguments fixe mais en vrai c dynamique :D ;))
et j'me retrouvais avec une chaîne buf comme ça :
q(8HXhx" ,EOè...
'fin bref, en chaîne de caractères ki n'avait visiblement pas de \0 à la fin (après le "q" ici);
 
j'suis obligé de mettre buf[strlen("q" )] = 0; après mon strncpy ? ça me parrait louche pke j'en ai jamais entendu parler :heink:


Message édité par Deadog le 17-07-2003 à 02:00:00
mood
Publicité
Posté le 17-07-2003 à 01:59:18  profilanswer
 

n°459827
Taz
bisounours-codeur
Posté le 17-07-2003 à 02:38:04  profilanswer
 

1) si tu veux copié un seul caractère, pas la peine de faire aec strncpy
2) c'est bien tenté avec strlen, le problème c'est que strlen recehrche cet '\0' final. donc la solution
 

Code :
  1. char *dest, *src;
  2. size_t n;
  3. // ....
  4. strncpy(dest, src, n);
  5. dest[n]='\0';


evidemment, il faut quand meme tenir compte de la taille de l'espace alloué pour dest. et voilà. si tu veux améliorer ta détection d'erreur (apparement tes segfaults apparaissaient quand ça leur plaisaient, ce qui est normal puisqu' on peut tres bousille des tonnes de trucs sans faire d'erreur de segmentation), je te conseille, l'emploi de efence

n°459829
Deadog
Dain Bramaged
Posté le 17-07-2003 à 03:45:37  profilanswer
 

1-c'est un cas particulié ke j'ai présenté ici, dans mon prog ça copie bcp plus de caract ;)
 
2-bah en faite, dans mon cas voici comment g fait :

Code :
  1. strncpy(buf, token, max_lexem_len);
  2. buf[strlen(token)] = 0;


donc je me faisait pas avoir avec le strlen ;)
 
merci pour efence, je vais voir ça demain :jap:


Message édité par Deadog le 17-07-2003 à 03:46:14
n°459847
polo021
Posté le 17-07-2003 à 08:15:37  profilanswer
 

deadog a écrit :


2-bah en faite, dans mon cas voici comment g fait :

Code :
  1. strncpy(buf, token, max_lexem_len);
  2. buf[strlen(token)] = 0;


 


tu te fais avoir avec le strlen il me semble.
si token = "qwertyuiop";
et que tu fais strncpy(buf,token,3);
puis buf[strlen(token)] = 0;  
tu vas te retrouver avec buf = "qwe???????0"  ;)


Message édité par polo021 le 17-07-2003 à 08:16:30
n°460285
Deadog
Dain Bramaged
Posté le 17-07-2003 à 14:15:32  profilanswer
 

non pke max_lexem_len a une valeur maximal ne pouvant pas dépasser ce ke je lui fait copié ;)

n°460299
antp
Super Administrateur
Champion des excuses bidons
Posté le 17-07-2003 à 14:22:58  profilanswer
 

deadog a écrit :

non pke max_lexem_len a une valeur maximal ne pouvant pas dépasser ce ke je lui fait copié ;)


 
Ouais enfin c'est quand même plus propre d'utiliser max_lexem_len, ça fait un appel de fonction en moins et c'est plus sûr au cas où tu modifies un truc :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°460306
Deadog
Dain Bramaged
Posté le 17-07-2003 à 14:32:08  profilanswer
 

oui, c'est pas faux ça :D ;)

n°460352
Taz
bisounours-codeur
Posté le 17-07-2003 à 15:03:57  profilanswer
 

polo021 a écrit :


tu te fais avoir avec le strlen il me semble.

et tu lis le topic avant de répondre des fois?

n°460359
polo021
Posté le 17-07-2003 à 15:06:40  profilanswer
 

++Taz a écrit :

et tu lis le topic avant de répondre des fois?


qu'est ce qui n'est pas a ton gout encore? :o

n°460374
Taz
bisounours-codeur
Posté le 17-07-2003 à 15:17:31  profilanswer
 

ben que tu lis pas le post avec de répondre


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

  [C / GNU] petit doute sur strncpy

 

Sujets relatifs
Biblitohèque scientifique GNUPetit probleme de client smtp
[FLASH] J'ai un petit problème de séquence ?[VC++] Compiler un petit bout de C du site Microsoft !
petit problème avec une classe PHPPetit progamme en JAVA et PASCAL
[access]petit souci tout bete de requete sql...petit probleme...
Petit probleme php, histoire de class (objet)....[sql]petit probleme
Plus de sujets relatifs à : [C / GNU] petit doute sur strncpy


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