我必须阅读用户的输入。我不知道用户将输入多少行或每行多少个字符,所以我不能使用数组。如果用户输入一个空行,则输入完成。
我的问题是,如何在不使用数组的情况下做到这一点。我尝试使用此代码,但它在运行时崩溃。
char *line = "";
gets(line);
为什么这不起作用?以及如何在不使用数组的情况下读取输入?
TIA
我必须阅读用户的输入。我不知道用户将输入多少行或每行多少个字符,所以我不能使用数组。如果用户输入一个空行,则输入完成。
我的问题是,如何在不使用数组的情况下做到这一点。我尝试使用此代码,但它在运行时崩溃。
char *line = "";
gets(line);
为什么这不起作用?以及如何在不使用数组的情况下读取输入?
TIA
这是行不通的,因为line
指向的内存仅足以存储一个空字符串,并且该内存通常是不可修改的,因为字符串文字在运行时无法更改。
您需要一个实际的缓冲区,如下所示:
char line[128];
请注意,gets()
最好避免这样做,它不会防止缓冲区溢出,因此总是很危险。
改用fgets()
:
if( fgets(line, sizeof line, stdin) != NULL)
{
printf("got some input!\n");
}
您出于某种原因说您想“不使用数组”来执行此操作,这有点……很难,因为任何“缓冲区”几乎都是 C 中的数组。如果您想避免使用该 []
语法,则需要动态分配内存,而不是使用malloc()
.
然后你不能sizeof
像上面那样使用,它将评估指针的大小。现在你需要:
const size_t buffer_size = 128;
char *line;
if((line = malloc(buffer_size)) != NULL)
{
if(fgets(line, buffer_size, stdin) != NULL)
{
/* use the data we just read in */
}
free(line); /* discard the buffer so we don't leak memory. */
}