我做了这样的事情:
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 个字符的行。那些具有更多字符的字符,我想忽略并将一些特殊消息写入“保存”数组或perror
or stout
溪流。
然而,我怎么可能知道我是否正好得到了 100 个字符或者我的fgets
已经读到极限了?
我怎么知道我一开始是否获得了超过 100 分?
不要使用fgets()
, use getline() http://pubs.opengroup.org/onlinepubs/9699919799/functions/getdelim.html. With 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++;
}
}
您可能想删除任何尾随的newline
在将行复制到数组之前从每行中提取字符。
请注意,我使用了strdup()
复制该行 - 这不是 C 标准函数,但这是 POSIX http://pubs.opengroup.org/onlinepubs/9699919799/functions/strdup.html.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)