2011-10-25 40 views
3

我正在使用fgetc从文件中读取字符串。因为我不知道字符串需要多长时间,我需要为应该保存数据的数组重新分配空间。为此,我需要知道当前数组何时已满。我不太确定char数组是否在读取字符后终止。所以例如我有一个大小为8的数组,fgetc会给我第9个字符。数组的大小现在是8还是9? (8个字符+ \ 0或只有8个字符)。有没有办法测试它?如果没有\ 0。当我读完字符串时,是否需要将它自己添加到char数组中?如何知道字符串是否为空终止

+1

所有的标准字符串函数都依赖一个NULL字符在那里,所以是的,你必须添加它,否则你将运行在奇怪的问题 – RageZ

回答

0

由于fgetc每次调用读取一个字符,要获取字符串的大小,您应该检查读取的字符是\ 0还是EOF到达。如果您看到\ 0字节,则应复制包括\ 0的所有字节。如果在没有\ 0的情况下到达EOF并且字符计数器大于0,则应该自己添加\ 0。

2

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

1

当你使用fgetc的时候,你正在建立一个一个字节地保存字节的内存,所以你需要让你的内存分配为总字符串长度+ 1,因为你需要额外的字节为'\ 0'。

与“字符串”一起工作的函数实际上正在查看以'\ 0'结尾的字节集合。例如,“Hello World”在内存中存储为'H'''''''''''''''''''''''''''''''''''''。这就是函数如何知道何时停止处理字符串。