【发布时间】:2015-02-04 06:28:07
【问题描述】:
我应该如何使用fgets() 读取长输入,我不太明白。
这是我写的
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char buffer[10];
char *input;
while (fgets(buffer,10,stdin)){
input = malloc(strlen(buffer)*sizeof(char));
strcpy(input,buffer);
}
printf("%s [%d]",input, (int)strlen(input));
free(input);
return 0;
}
【问题讨论】:
-
看
realloc。并考虑每次加倍分配的策略,以及直接读入缓冲区。顺便说一句:size_t的 printf 格式是%zu。 -
如果有,请考虑使用
getline而不是fgets。 -
我知道 getline,但我必须使用 fgets
-
我看到了它们,但我不明白 fgets 是如何工作的,当输入比我指定的缓冲区长时会发生什么,它会等待我分配内存并将其存储在那里吗?
-
您的代码在
malloc()中有一个经典的非一错误。使用strlen(str)几乎总是错误的;它应该几乎总是strlen(str)+1。您的循环也会严重泄漏内存;您在每次迭代时覆盖存储在input中的前一个指针。
标签: c string input string-length