Qu'est-ce qui se passe ici est la suivante:
- dans la fonction
main
vous appelez printString
avec un pointeur sur la chaîne « bonjour »
- la fonction
printString
tente de lire un personnage avec getchar()
- et enregistrer ce caractère à la place du 'h'
Les règles de la langue disent que tenter de changer ce 'h' est un comportement indéfini. Si vous avez de la chance, votre programme se bloque; Si vous êtes très malchanceux, le programme fonctionnera. En résumé, getchar()
est utilisé pour la lecture; putchar()
est utilisé pour l'écriture.
Et vous voulez écrire 5 lettres: «h», «e», «l», «o», et un autre «o».
hello
^ ch is a pointer
ch *ch is 'h' -- ch points to an 'h'
Y at-il quelque chose après ce dernier 'o'? Il y a! A '\0'
. L'octet zéro termine la chaîne. Donc, essayez ceci (avec printString("hello");
) ...
void printString(char *ch)
{
putchar(*ch); /* print 'h' */
ch = ch + 1; /* point to the next letter. */
/* Note we're changing the pointer, */
/* not what it points to: ch now points to the 'e' */
putchar(*ch); /* print 'e' */
ch = ch + 1; /* point to the next letter. */
putchar(*ch); /* print 'l' */
ch = ch + 1; /* point to the next letter. */
putchar(*ch); /* print 'l' */
ch = ch + 1; /* point to the next letter. */
putchar(*ch); /* print 'o' */
ch = ch + 1; /* point to the next letter. What next letter? The '\0'! */
}
Ou vous pouvez écrire que dans une boucle (et appeler à partir principale avec des arguments différents) ...
void printString(char *ch)
{
while (*ch != '\0')
{
putchar(*ch); /* print letter */
ch = ch + 1; /* point to the next letter. */
}
}
est-il une raison que nous pouvons » t utilise printf? – KLee1
getchar() lit l'entrée de stdin. Voulez-vous cela, ou voulez-vous imprimer "bonjour"? –
Je vais en fait manipuler les données en analysant un fichier délimité par des barres verticales dans des colonnes de 15 caractères, mais je voulais sortir le code de main et le mettre dans une fonction et j'étais simplement en train de m'étrangler sur la façon de passer une chaîne de stdin. – bafromca