Lorsque le tableau de caractères substring[#]
est défini sur [64]
, le fichier génère un caractère supplémentaire. Le caractère supplémentaire varie à chaque compilation. Parfois es?
, parfois esx
entre autres.C Pourquoi une variable non apparentée/non déclarée influence-t-elle la sortie d'une autre variable?
Si je change le [64]
en tout autre nombre (au moins ceux que j'ai essayés: 65, 256,1 ..) il sort correctement comme es
.
Encore plus étrange, si je laisse le tableau de caractères utilisé/non déclaré char newString[64]
dans ce fichier, il affiche la sous-chaîne correcte es
même avec le 64.
- Comment la taille apparemment arbitraire de 64 affecte l'out ?
- Comment un tableau de caractères complètement indépendant (
newString
) influence-t-il la sortie d'un autre tableau de caractères?
.
int main() {
char string[64];
char newString[64];
char substring[64];
fgets(string,64,stdin);
strncpy(substring, string+1, 1);
printf("%s\n", substring);
return 0;
}
Attention à l'utilisation correcte de 'strncpy'; il n'ajoute pas de zéro final. Il semble que vous pensiez qu'il va "extraire" une sous-chaîne de l'autre. – usr2564301
Votre programme a un comportement indéterminé. Donc la prémisse entière de votre question est fausse - il ne sert à rien de demander une explication pour le comportement de UB. Votre question devrait être - où est le bug dans mon code. La réponse à cela est probablement ici: 'strncpy (substring, string + 1, 1)'. 'string + 1' saute toute la chaîne de caractères et pointe sur l'octet qui suit. Et vous ne copiez que 1 octet, puis essayez de l'imprimer en tant que chaîne. – kaylum
Quelle est votre contribution? – chux