C - fgets() - 如果字符串更长怎么办?

Vir*_*721 0 c string gets file char

假设我有一个包含长度为10的字符串的文件:

ABCDEFGHIJ

并使用fgets()大小为4的缓冲区逐行读取我的文本文件.我将fgets()在循环中调用以确保读取整行.但是,在第一次通话时,它会读出前三个字符(buffer size -1)吗?它是否还会在我的4个char缓冲区的最后一个位置附加一个空终止字符,即使没有到达我的字符串的真正结尾,或者它将填充4个字符并且在缓冲区末尾没有空终止字符?谁打电话是strlen()不可能的?

谢谢 :)

alk*_*alk 5

该文档.

逐字逐句man fgets(由我斜体):

fgets()从流中读取最多一个小于大小的字符,并将它们存储到s指向的缓冲区中.读数在EOF或换行符后停止.如果读取换行符,则将其存储到缓冲区中. 终止空字节('\ 0')存储在缓冲区中的最后一个字符之后.


从HP-UX 11手册页(逐字逐句)逐字逐句:

与fgets()

将流中的字符读入s指向的数组,直到读取n-1个字符,读取新行字符并将其传送到s,或遇到文件结束条件. 然后以空字符终止该字符串.


POSIX规范:

fgets()函数必须从流中读取字节到s指向的数组,直到读取n-1个字节,或者读取a并将其传送到s,或者遇到文件结束条件.然后以空字节终止该字符串.


最后一点来自MSDN:

fgets函数从输入流参数中读取一个字符串并将其存储在str中.fgets从当前流位置读取字符,包括第一个换行符,到流的末尾,或直到读取的字符数等于n-1,以先到者为准.存储在str中的结果附加一个空字符.换行符如果被读取,则包含在字符串中.