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

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

string vers char*

n°1849099
Joel F
Real men use unique_ptr
Posté le 09-02-2009 à 18:12:16  profilanswer
 

Reprise du message précédent :

el muchacho a écrit :


ouais, on a considérablement dérivé, cette discussion serait plus à sa place en cat C, mais bon c'est tjrs utile.  :o


Oui :)

mood
Publicité
Posté le 09-02-2009 à 18:12:16  profilanswer
 

n°1849102
masklinn
í dag viðrar vel til loftárása
Posté le 09-02-2009 à 18:14:18  profilanswer
 

el muchacho a écrit :

ouais, bref OSEF, c'est juste sur les man de BSD qu'il y a ces exemples d'usage. :o


Chuis sûr qu'ils sont aussi dans les man solaris, linux, ça pux [:j'invoque taiche]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1849180
el muchach​o
Comfortably Numb
Posté le 09-02-2009 à 22:29:47  profilanswer
 

Elmoricq a écrit :

Ou alors on peut utiliser snprintf() :o


Et bien non !
snprintf() semble ne pas garantir le '\0' terminal, donc n'est même pas safe non plus.:/
D'ailleurs le compilo Microsoft le déclare deprecated.
Enfin j'ai pas bien compris si pour C99 ils ont décidé de garantir le '\0'*.

 

Mais par défaut, il faut comme pour strncpy le faire systématiquement suivre par un
dst[sizeof(dst) - 1] = '\0';

 

Bref, beau bordel. [:marc]

 

edit: *après recherches, ça ne semble vrai qu'avec l'implémentation Microsoft en particulier.

 

Au passage, je crois comprendre pourquoi il est si facile de se planter avec strncpy: on peut facilement croire à première vue que ça s'utilise comme memcpy.

 

Or c'est exactement le contraire:

 

memcpy(dst, src, sizeof(src)); // correct, ssi sizeof(src) <= sizeof(dst)
strncpy(dst, src, sizeof(src));   // incorrect

Message cité 1 fois
Message édité par el muchacho le 09-02-2009 à 22:54:04

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°1849183
Elmoricq
Modérateur
Posté le 09-02-2009 à 22:33:17  profilanswer
 

el muchacho a écrit :


Et bien non !  
snprintf() semble ne pas garantir le '\0' terminal, donc n'est même pas safe non plus.:/
D'ailleurs le compilo Microsoft le déclare deprecated.
Enfin j'ai pas bien compris si pour C99 ils ont décidé de garantir le '\0'.
Bref, beau bordel. [:marc]


 
Hmm, snprintf() déprécié, alors que c'est C99 ? :heink:
Et snprintf() garanti toujours le NULL terminal, où as-tu vu le contraire ?

n°1849185
Joel F
Real men use unique_ptr
Posté le 09-02-2009 à 22:34:30  profilanswer
 

microsoft deprecate les 9/10 du C99 depuis VC9 :/

n°1849186
Elmoricq
Modérateur
Posté le 09-02-2009 à 22:35:04  profilanswer
 

Mais sur quelle base ?

n°1849188
el muchach​o
Comfortably Numb
Posté le 09-02-2009 à 22:42:32  profilanswer
 

Elmoricq a écrit :

 

Hmm, snprintf() déprécié, alors que c'est C99 ? :heink:
Et snprintf() garanti toujours le NULL terminal, où as-tu vu le contraire ?


Un peu partout sur le net, et en particulier sur la MSDN. En fait, tu as raison, j'ai bien l'impression que c'est l'implémentation Microsoft qui était foireuse, parce que dans cette manpage, il n'est pas mentionné que le null terminal n'est pas garanti.
http://libslack.org/manpages/snprintf.3.html

 

Historiquement, snprintf() existait dans pas mal de librairies avant d'être standardisé. Malheureusement (quelle surprise !), la version crosoft était foireuse. En fait, Microsoft a déprécié l'usage de SON implémentation de snprintf() sur son compilo. Donc dans l'absolu tu avais raison.


Message édité par el muchacho le 09-02-2009 à 22:59:28

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°1849292
Un Program​meur
Posté le 10-02-2009 à 09:18:44  profilanswer
 

masklinn a écrit :


Chuis sûr qu'ils sont aussi dans les man solaris, linux, ça pux [:j'invoque taiche]


 
Solaris 10 decrit strlcpy/strlcat mais ne donne pas d'indication de preference.

n°1849346
masklinn
í dag viðrar vel til loftárása
Posté le 10-02-2009 à 10:56:28  profilanswer
 

Un Programmeur a écrit :


 
Solaris 10 decrit strlcpy/strlcat mais ne donne pas d'indication de preference.


On parlait des n là, ceux qui sont pas utilisables, pas des l


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1849420
Elmoricq
Modérateur
Posté le 10-02-2009 à 13:40:48  profilanswer
 

el muchacho a écrit :

Ô joie, je viens de faire un test sur une version post 4.0 de gcc, et dans la glibc associée (2.5), sprintf est aussi safe:


Oui mais là pour le coup, strcpy() aussi c'est "safe"... au niveau du null terminal en tout cas. [:dawa]

mood
Publicité
Posté le 10-02-2009 à 13:40:48  profilanswer
 

n°1849429
el muchach​o
Comfortably Numb
Posté le 10-02-2009 à 14:10:55  profilanswer
 

Ouais, j'efface ce code honteux et je retire ce que j'ai dit sur sprintf().[:babut26]
Le dernier test était foireux du fait que le contenur de bar avait été modifié auparavant. sprintf() écrase sans complexe la destination, même dans les versions récentes de la glibc. Autant pour moi.


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
probléme accents dans une base POSTGRE à partir d'un prog JAVA[JAVA/EE] Export de données MySQL5 vers formulaire Word
Copie d'une cellule d'un classeur vers un autre sous condition[CVS] Migrer un repository Windows vers Unix
export vers fichier csv: grouper 2 informations en 1?Target vers la page principale
RTF vers TXT[C] Conversion Hexa vers ASCII
Pourquoi ne pas pointer vers un élément courant dans une liste chainéeRecuperer les informations d'un String
Plus de sujets relatifs à : string vers char*


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