Si la chaîne n'était pas vide, j'aurais gueulé sur le fait que ça puisse planter à la première tentative de modification. Mais puisqu'elle est vide, il y a peu de chance qu'on veuille la modifier en écrasant son zéro terminal...
Version imprimable
Si la chaîne n'était pas vide, j'aurais gueulé sur le fait que ça puisse planter à la première tentative de modification. Mais puisqu'elle est vide, il y a peu de chance qu'on veuille la modifier en écrasant son zéro terminal...
Oui, je reconnais que je l'avais oublié ... :oops:
Heureusement, les messages du compilateur sont là pour nous rappeler que nous ne sommes que des êtres de chair et donc faillibles !
Que celui qui n'a jamais oublié un cast ou qui n'en a jamais eu besoin me jette le premier toron de ferrite ! :lol:
Bah, là, je n'ai fait que respecter les conditions du problème, y compris ton code initialement proposé pour strdup() - et j'ai conservé cette caractéristique - qui ne propose de réserver que la stricte longueur nécessaire à la chaine entrée par l'utilisateur ... soit juste 1 octet pour le zéro final en cas de chaîne vide !
Or, en cas de possibilité de modification de la chaîne, la fonction strdup() que tu proposais - et donc la mienne aussi, qui pousse juste la tienne un poil plus loin en gérant différemment la prise en charge d'une chaîne vide comme un échec de l'allocation - n'a plus lieu d'être et doit alors être repensée, et je ne comprends alors pas le sens de ta dernière remarque ... à moins qu'elle soit simplement le signe de ta reddition en rase campagne camouflée en retraite bien ordonnée ! :D;)
C'est une reddition. Je disais que si jamais strdup() pouvait retourner des chaînes littérales non-vides, je gueulerais.
Merci pour ta réponse, elle à parfaitement fonctionnée, je ne me suis pas reconnecté entre temps car je bosse un peu partout en france pour le taf, mes excuses pour le retard.