gpt4 book ai didi

c - 读取C中的输入

转载 作者:行者123 更新时间:2023-11-30 18:32:10 24 4
gpt4 key购买 nike

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

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

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. */
}

关于c - 读取C中的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16275533/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com