任何人都可以向我解釋爲什麼這不起作用?幫助自定義getline()函數
#include <stdio.h>
#include <stdlib.h>
char *getline(int lim)
{
char c;
int i;
char *line;
line = malloc(sizeof(char) * lim);
i = 0;
while((c = getchar()) != '\n' && c != EOF && i < lim-1)
{
*line = c;
line++;
i++;
}
*line = '\0';
printf("%s", line);
return line;
}
我現在不擔心返回值 - 只是原因爲何printf("%s", line)
不工作。
謝謝!
編輯:固定爲line = malloc(sizeof(char) * lim);
但它仍然無法正常工作。
解決方案:*line
的地址在整個函數中遞增。當它傳遞到printf()
時,*line
指向'\ 0',因爲這是其地址遞增的地方。使用臨時指針將malloc()
分配的原始地址存儲到*line
,然後將該指針傳遞到printf()
,允許函數沿指針移動。
sizeof char的定義是1,所以這是多餘的。 – 2009-01-30 17:24:07
@Charles Bailey:是的,但我認爲它應該保持這種狀態,因爲當前版本更加明確。無論如何,編譯器會將其全部轉換爲常量。 – 2009-01-30 17:45:03
那麼,對於使用sizeof * lim來防止未來更改的魯棒性有一個爭論,但是使用sizeof(char)只是浪費了輸入(恕我直言)。 – 2009-01-30 17:57:17