如何判断一个字符串是否以空字符结尾?

5

我正在使用fgetc从文件中读取字符串。由于我不知道字符串的长度,因此需要重新分配用于保存数据的数组的空间。为此,我需要知道当前数组何时已满。我不确定在读取字符后char数组是否以null结尾。例如,如果我有一个大小为8的数组,而fgetc将给我第9个字符。那么数组的大小是8还是9?(8个字符+ \0还是只有8个字符)。是否有一种方法来测试它?如果没有\0,当我完成读取字符串时,我是否需要自己添加到char数组中?


1
所有标准字符串函数都依赖于存在 NULL 字符,因此是的,您必须添加它,否则您将遇到奇怪的问题。 - RageZ
3个回答

2

您需要跟踪缓冲区的当前大小和添加字符的位置。如果位置等于大小,则需要增加缓冲区。实际大小应该为+1以容纳终止字符\0,您必须在读取最后一个字符后始终添加它。


2
当您使用fgetc时,您正在逐字节构建保存字符串的内存,因此您需要将内存分配总长度为字符串长度+1,因为您需要额外的一个字节用于终止字符'\0'。
处理“字符串”的函数实际上是查看以'\0'结尾的字节集合。例如,“Hello World”在内存中存储为'H''e''l''l''o''W''o''r''l''d''\0',这就是函数知道何时停止处理字符串的方式。

1

由于fgetc每次只读取一个字符,要获取字符串的大小,您应该检查读取的字符是否为\0或已达到EOF。如果看到\0字节,则应复制所有字节,包括\0。如果已达到EOF而没有\0,并且字符计数器> 0,则应自行添加\0。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接