2009-12-06 4 views

Répondre

6

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); 
+0

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

+0

Merci, je viens de voir que vous avez ajouté quelques informations à votre commentaire. – Fred

2

« % 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.

+0

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'. –