c ne contient pas de caractères nuls. Comment ptr obtient-il la longueur?
Ce n'est pas le cas. Il semble donner la bonne réponse dans vos tests parce que l'emplacement de mémoire suivant l'adresse de c
arrive à contenir un zéro octet. Cet emplacement n'est pas défini pour contenir un zéro, et le programme n'est pas autorisé à y accéder, vous ne pouvez donc pas compter sur un tel code pour continuer à fonctionner.
Dans la langue de la norme C, le comportement du programme est non défini, ce qui signifie que non seulement le résultat de l'opération imprévisible, the entire program is rendered meaningless.
Même sans prendre en compte le comportement non défini, ci-dessus le code peut cesser de fonctionner avec le moindre changement - par exemple, lorsque vous changez d'architecture, de compilateur ou même de drapeaux de compilation, ou lorsque vous ajoutez plus de fonctions dans le mixage. Bien que ces extraits de code peuvent être utiles pour apprendre comment les choses fonctionnent sous le capot, elles ne devraient jamais être utilisées dans le code de production.
"Mon code a un bug, pourquoi fait-il quelque chose d'étrange?" Eh bien, parce qu'il a un bug. Corrige le bug et le mystère s'en ira. –
'J'ai fait une mauvaise chose. Je sais que j'ai fait une mauvaise chose. De mauvaises choses sont arrivées en conséquence. Expliquer pourquoi'. Avoir un downvote :( –