这里发生的情况如下:
- 在您使用指向字符串“hello”的指针
main
调用的函数中printString
- 该
printString
函数尝试读取一个字符getchar()
- 并将该字符保存在“h”的位置
该语言的规则说,试图改变“h”是未定义的行为。如果你幸运的话,你的程序会崩溃;如果你很不走运,它会显示该程序有效。
简而言之:getchar()
用于阅读;putchar()
用于书写。
你想写 5 个字母:'h'、'e'、'l'、'o' 和另一个 'o'。
你好
^ ch 是一个指针
ch *ch is 'h' -- ch 指向一个 'h'
在最后一个“o”之后有什么东西吗?有!一个'\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. */
}
}