Что происходит здесь следующее:
- в функции
main
вы вызываете printString
с указателем на строку "привет"
- функция
printString
пытается прочитать символ с getchar()
- и сохраните этот символ вместо 'h'
Правила языка гласят, что попытка изменить это «h» - это неопределенное поведение. Если вам повезет, ваша программа вылетает; если вам не повезло, программа будет работать.
Вкратце: getchar()
используется для чтения; putchar()
используется для письма.
И вы хотите написать 5 букв: 'h', 'e', 'l', 'o' и другое 'o'.
hello
^ ch is a pointer
ch *ch is 'h' -- ch points to an 'h'
Есть ли что-то после этого последнего 'o'? Есть! A '\0'
. Нулевой байт завершает строку. Так что попробуйте это (с 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'! */
}
Или вы можете написать это в цикле (и вызвать из main с разными аргументами) ...
void printString(char *ch)
{
while (*ch != '\0')
{
putchar(*ch); /* print letter */
ch = ch + 1; /* point to the next letter. */
}
}