-1

我必须阅读用户的输入。我不知道用户将输入多少行或每行多少个字符,所以我不能使用数组。如果用户输入一个空行,则输入完成。

我的问题是,如何在不使用数组的情况下做到这一点。我尝试使用此代码,但它在运行时崩溃。

char *line = "";
gets(line);

为什么这不起作用?以及如何在不使用数组的情况下读取输入?

TIA

4

1 回答 1

4

这是行不通的,因为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. */
}
于 2013-04-29T09:49:13.580 回答