這裏會發生什麼情況如下:
在功能
main
- 你叫
printString
有一個指向字符串「hello」
- 的
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'! */
}
或者你可以寫在一個循環(從主呼叫使用不同的參數)...
void printString(char *ch)
{
while (*ch != '\0')
{
putchar(*ch); /* print letter */
ch = ch + 1; /* point to the next letter. */
}
}
來源
2010-09-25 17:09:42
pmg
是否有一個原因,我們可以」不要使用printf? – KLee1 2010-09-25 16:47:33
getchar()從標準輸入讀取輸入。你想要嗎,還是想打印「你好」? – 2010-09-25 16:55:47
我實際上將通過解析一個垂直分隔欄文件爲15個字符的列來處理數據,但是我想將代碼從主體中拉出來放到一個函數中,我簡直窒息瞭如何遍歷一個來自stdin的字符串。 – bafromca 2010-09-25 17:02:32