petit doute sur strncpy [C / GNU] - C - Programmation
Marsh Posté le 17-07-2003 à 02:38:04
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 :
|
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
Marsh Posté le 17-07-2003 à 03:45:37
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 :
|
donc je me faisait pas avoir avec le strlen
merci pour efence, je vais voir ça demain
Marsh Posté le 17-07-2003 à 08:15:37
deadog a écrit :
|
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"
Marsh Posté le 17-07-2003 à 14:15:32
non pke max_lexem_len a une valeur maximal ne pouvant pas dépasser ce ke je lui fait copié
Marsh Posté le 17-07-2003 à 14:22:58
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
Marsh Posté le 17-07-2003 à 15:03:57
polo021 a écrit : |
et tu lis le topic avant de répondre des fois?
Marsh Posté le 17-07-2003 à 15:06:40
++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?
Marsh Posté le 17-07-2003 à 01:59:18
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 )
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
Message édité par Deadog le 17-07-2003 à 02:00:00