gpt4 book ai didi

c - 标准输入检索的输入行大小

转载 作者:行者123 更新时间:2023-11-30 17:53:18 26 4
gpt4 key购买 nike

我正在使用fgets()函数将字符串存储在具有固定大小的结构中。

if(fgets(auth_data->user_id, USR_SIZE, stdin) == NULL)
EXIT_ON_ERROR_("Error on fgets function\n");
fflush(stdin);

我知道所有接收到的大小大于 USR_SIZE -1 的字符串被削减。我需要知道输入字符串具有完全相同的大小( USR_SIZE -1'\0' 字符)。

为此我可以调用 strlen在它们上检查字符串是否有长度 < USR_SIZE -1 。但我如何检查原始字符串是否被 fgets 剪切。在这两种情况下,我首先知道字符串的格式不正确。

此外是fflush(stdin)真的需要清除输入流吗?

最佳答案

fgets 将换行符存储在缓冲区中作为最后一个字符。缓冲区中没有换行符意味着 EOF(使用 feof 检查)或字符串被剪切。

或者您可以用 fread() 循环替换所有验证代码,该循环读取预设数量的字节。

在输入流上调用 fflush 是不正确的。来自 GNU libc 手册:

CONFORMING TO C89, C99, POSIX.1-2001, POSIX.1-2008.

  The  standards  do  not  specify the behavior for input streams.  Most
other implementations behave the same as Linux.

相反,读取直到流结束(或直接关闭它)。

关于c - 标准输入检索的输入行大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15708769/

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