我正在使用fgetc从文件中读取字符串。由于我不知道字符串的长度,因此需要重新分配用于保存数据的数组的空间。为此,我需要知道当前数组何时已满。我不确定在读取字符后char数组是否以null结尾。例如,如果我有一个大小为8的数组,而fgetc将给我第9个字符。那么数组的大小是8还是9?(8个字符+ \0还是只有8个字符)。是否有一种方法来测试它?如果没有\0,当我完成读取字符串时,我是否需要自己添加到char数组中?
我正在使用fgetc从文件中读取字符串。由于我不知道字符串的长度,因此需要重新分配用于保存数据的数组的空间。为此,我需要知道当前数组何时已满。我不确定在读取字符后char数组是否以null结尾。例如,如果我有一个大小为8的数组,而fgetc将给我第9个字符。那么数组的大小是8还是9?(8个字符+ \0还是只有8个字符)。是否有一种方法来测试它?如果没有\0,当我完成读取字符串时,我是否需要自己添加到char数组中?
您需要跟踪缓冲区的当前大小和添加字符的位置。如果位置等于大小,则需要增加缓冲区。实际大小应该为+1
以容纳终止字符\0
,您必须在读取最后一个字符后始终添加它。
由于fgetc每次只读取一个字符,要获取字符串的大小,您应该检查读取的字符是否为\0或已达到EOF。如果看到\0字节,则应复制所有字节,包括\0。如果已达到EOF而没有\0,并且字符计数器> 0,则应自行添加\0。