Initialisation string pas très propre [Résolu]

Messages postés
223
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
8 août 2011
- - Dernière réponse : 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 ?
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
3
Merci
memset

à l'init : char s[64] = ""; fait pareil.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 136 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ymca2003
Messages postés
719
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
8 janvier 2014
7
0
Merci
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);
Commenter la réponse de cs_AlexN
Messages postés
223
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
8 août 2011
0
Merci
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 !
Commenter la réponse de HeavenForsaker
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
0
Merci
char s[64];
memset(s, 0, 64);
Commenter la réponse de ymca2003
Messages postés
223
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
8 août 2011
0
Merci
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.
Commenter la réponse de HeavenForsaker
Messages postés
223
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
8 août 2011
0
Merci
Ok, impeccable merci les gars.
Commenter la réponse de HeavenForsaker