Initialisation string pas très propre

Résolu
HeavenForsaker Messages postés 223 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 8 août 2011 - 26 avril 2006 à 13:37
HeavenForsaker Messages postés 223 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 8 août 2011 - 26 avril 2006 à 19:31
Bonjour,

Je me suis aperçu qu'il y avait de la daube dans mes chaines de caractère à l'initialisation et même en utilisant un strcpy(String, ""). Voila un extrait de code :

char String[4 + 1];
char String2[8 + 1];
strncpy(String, "", 1);
strncpy(String, "Test", 4);
strncat(String2, String, 5);

La question est donc simple, y a t-il une fonction qui permet de vider une chaine correctement ?

6 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
26 avril 2006 à 19:17
memset

à l'init : char s[64] = ""; fait pareil.
3
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
26 avril 2006 à 15:46
Bonjour,

La fonction strcpy ajoute toujours le 0;

La fonction strncpy n'ajoute pas automatiquement le 0, si la longueur spécifiée est  inférieure ou égale à la longueur de la source, d'où les résidus dans tes chaines.

char String[4 + 1];
char String2[8 + 1];*String *String2 0; // Intialiser les chaines.
strcpy(String, "Test");
strcpy(String2, String);printf("String %s\nString2 %s\n", String, String2);
0
HeavenForsaker Messages postés 223 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 8 août 2011
26 avril 2006 à 16:45
Ok, merci man pour ces précisions. Mais j'obtiens le même résultat avec :
*String *String2 0;
strncpy(String, "", 1);
strcpy(String, "");

Ces fontions ne font que placer le caractère '\0' au début de la chaine apparement, pour les vider complétement j'ai trouvé la méthode suivante :

strncpy(String, "", LongueurDeString);

exemple :
char String[4 + 1];
strncpy(String, "", 5);

Avec ça on obtiens un beau "\000\000\000\000"
Voila c'était pas plus compliqué que ça !
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
26 avril 2006 à 19:03
char s[64];
memset(s, 0, 64);
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
HeavenForsaker Messages postés 223 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 8 août 2011
26 avril 2006 à 19:13
Merci ymca2003, je la connaissais pas mais ça fonctionne !
Lequel vaut il mieux utiliser pour vider une chaine proprement et rapidement?

strncpy(String, "", 5);
            ou
memset(String, 0, 5);

Si il y en à d'autre je suis preneur.
0
HeavenForsaker Messages postés 223 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 8 août 2011
26 avril 2006 à 19:31
Ok, impeccable merci les gars.
0
Rejoignez-nous