gpt4 book ai didi

c - 如何确定 fgets 是否在读取所有字母之前停止?

转载 作者:太空宇宙 更新时间:2023-11-04 01:54:31 24 4
gpt4 key购买 nike

我做这样的事情:

char buf[100];              
int n = 0;
char save[100][100];

while (fgets(buf,100, file)!=NULL) {
strcpy(save[n], buf);
printf("%s",buf);
n++;
}

我之前打开了一个带有错误处理的FILE = *file。我只想阅读少于或等于 100 个字符的行。那些具有更多字符的字符,我想忽略并将一些特殊消息写入“保存”数组或 perrorstout 流。

但是,我怎么可能知道我是否刚好收到 100 个字符,或者我的 fgets 只是在其限制下停止读取?

我如何知道我是否首先获得了 100 多个?

最佳答案

不要使用fgets()use getline() .使用 fgets(),一旦您阅读了太长的一行(无论您如何识别它),您将不得不继续阅读该行并丢弃它,直到您到达新的一行。换句话说,您需要跟踪状态,如果您使用 getline() 则不需要跟踪状态,因为它会为您提供整行,并告诉您它有多长:

FILE *fp = // fopen() however you need to

char *lineArray[ MAX_LINES ];
int ii = 0;

char *line = NULL;
size_t len = 0UL;

// loop until getline() fails
for ( ;; )
{
ssize_t lineLen = getline( &line, &len, fp );
if ( lineLen == -1L )
{
break;
}

if ( lineLen > 100L )
{
// handle too-long line
}
else
{
lineArray[ ii ] = strdup( line );
ii++;
}
}

在将行复制到数组之前,您可能希望从每一行中删除任何尾随的 换行符 字符。

请注意,我使用 strdup() 来复制该行 - 这不是 C 标准函数,but it is POSIX .

关于c - 如何确定 fgets 是否在读取所有字母之前停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36867754/

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