Pourquoi cela ne fonctionne-t-il pas?Impression de sous-chaînes à partir d'arguments de ligne de commande, en C
printf("%s\n", argv[1][3]);
Lorsque cela fonctionne?
printf("%c\n", argv[1][3]);
Pourquoi cela ne fonctionne-t-il pas?Impression de sous-chaînes à partir d'arguments de ligne de commande, en C
printf("%s\n", argv[1][3]);
Lorsque cela fonctionne?
printf("%c\n", argv[1][3]);
Parce que le spécificateur de format %s
dit printf
que l'argument est une chaîne terminée par zéro. Vous donnez printf
un seul caractère - le quatrième caractère dans le deuxième élément du tableau argv
.
Si vous souhaitez imprimer la sous-chaîne à partir du quatrième caractère à la fin de la chaîne, vous pouvez le faire aussi, il vous suffit d'obtenir un pointeur sur ce personnage:
printf("%s\n", &argv[1][3]);
ou, si vous préfèrent:
printf("%s\n", argv[1] + 3);
« % s » dans une chaîne foramt attend un argument « char * », mais vous passez un « char » de sorte que vous obtenez des ordures (probablement un accident). "% c" dans une chaîne de format attend un argument "char", ce que vous lui donnez, donc cela fonctionne.
Moins de risque d'erreur qu'une erreur de compilation. GCC (au moins) peut effectuer une vérification de type pour les fonctions de chaîne de format comme 'printf' et' scanf'. –
Mais c'est une chaîne terminée par zéro, je veux juste qu'elle commence à partir du décalage 3 et continue à imprimer jusqu'à null. Comment pourrais-je réaliser la même chose alors? – Fred
Merci, je viens de voir que vous avez ajouté quelques informations à votre commentaire. – Fred