我的目标是制作一个程序,从输入中扫描一个单词,然后将其保存为一个大字符串。
我确信输入总是单词'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]);
Ouput是错误的。(RUN FAILED (exit value 1, total time: 2s
)
例如,我想要输入:
one
two
three
four
five
这个用于输出:
"one two three four five"
每次while循环时,您都会分配一个新的line
,丢弃旧值和其中的字符。除了最后一个字符,您从不初始化任何东西,所以当循环结束时,line
就是垃圾,只有最后一个字符除外。您只想在开始时分配一个足够大的缓冲区ONCE,或者使用realloc
使缓冲区更大。
您有while(feof(stdin))
,它几乎总是错误的——feof
只有在未能从输入中读取字符之后才为真。所以你最终循环了太多次,复制了最后一个角色。请检查scanf
的返回值。
我是根据您的回复来做这件事的。
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;
}