我的目标是创建一个程序,从输入中扫描一个单词,然后将其保存为一个大字符串。
我确信输入始终是'\n'
字'\n'
...
所以我正在尝试扫描单个字符并将其保存到数组中,并将'\n'
替换为' '
。
我的代码:
char c;
char *line;
int len = 0;
while(!feof(stdin))
{
len++;
char *line = (char *)malloc(sizeof(char) * len);
scanf("%c", &c);
if (c == '\n')
line[len - 1] = ' ';
else
line[len - 1] = c;
}
int q;
for(q = 0; q < len - 1; q++)
printf("%c", line[q]);
输出错误。 (RUN FAILED (exit value 1, total time: 2s
)
例如我想要输入:
one
two
three
four
five
,这用于输出:
"one two three four five"
答案 0 :(得分:0)
每次在while循环中,您都会分配一个新的line
,丢弃旧值及其中的字符。除了最后一个字符之外,你永远不会初始化任何东西,所以当你的循环结束时,line
是垃圾,除了最后一个字符。您只想在开始时分配足够大的缓冲区ONCE,或使用realloc
使缓冲区更大。
你while(feof(stdin))
几乎总是错的 - feof
只有在未能从输入中读取字符后才会出现。所以你最终循环太多次,复制最后一个字符。请改为检查scanf
的返回值。
答案 1 :(得分:0)
我是根据你的回答做出来的。
char c;
char *line;
int len = 0;
while (scanf("%c", &c) != EOF) {
len++;
line = (char *) realloc(line, sizeof (char) * len);
if (c == '\n')
line[len - 1] = ' ';
else
line[len - 1] = c;
}