![]() |
1
13
如果你不打算使用
它只识别换行符作为换行符;它删除换行符。它不会使缓冲区溢出;它不会丢弃多余的字符,因此如果调用它读取很长的行,它将以块的形式读取该行;它返回读取的字符数。如果需要区分溢出和恰好是缓冲区长度-1的行,则可能需要保留换行符-并对代码进行相应的更改:
这上面有无限的小变体,例如如果行必须被截断,则丢弃任何多余的字符。如果您想处理DOS,(旧的)Mac或Unix行结尾,那么从CSV代码中借用一个叶子 "The Practice of Programming" 作者Kernighan&Pike(一本优秀的书)并使用:
然后你可以用它来代替
处理整个过程的另一种方法是使用
在上下文中,打开文件并检查其有效性,然后调用:
|
![]() |
2
1
如果用户输入80个或更多字符,则存在缓冲区溢出的风险。
我和小偷在一起,你应该用
|
![]() |
3
1
除非您希望获得一种超高效的方法来设置读取的字符数,否则请使用
用一个相似但不同的简单
如果需要删除最后一个'\n'
如果字符串真的很长(比如42兆字节),那么最好逐字读取并保持计数
|
![]() |
4
1
如果您需要每个字符来检查、修改或其他任何东西,那么使用fgets。 对于其他一切,使用fgets。
请注意,fgets将一直读取,直到到达新行或EOF(或者缓冲区已满)。如果从文件中读取,新行字符“\n”也会附加到字符串中。还附加了空字符。
|
![]() |
5
-1
没有行大小限制,严格地说是C89(您的代码只有C99),比如:
|
![]() |
6
-2
|