我正在使用fgetc从文件中读取字符串。因为我不知道字符串将需要多长时间我需要为应该保存数据的数组重新分配空间。为此,我需要知道当前阵列何时已满。我不太确定在读取字符后char数组是否为空终止。所以例如我有一个大小为8的数组,fgetc将给我第9个字符。阵列的大小现在是8还是9? (8个字符+ \ 0或仅8个字符)。有没有办法测试它?如果没有\ 0。当我读完字符串后,我是否需要将自己添加到char数组中?
答案 0 :(得分:2)
您需要跟踪缓冲区的当前大小以及添加字符的位置。那么如果位置等于你需要增加缓冲区的大小。实际大小应为+1
以容纳终止\0
字符,您必须在最后一个字符读取后始终添加该字符。
答案 1 :(得分:1)
因为fgetc每次调用读取一个字符,要获得字符串的大小,您应该检查读取字符是否为\ 0或EOF到达。如果你看到一个\ 0字节,你应该复制所有字节,包括\ 0。如果在没有\ 0的情况下达到EOF并且如果字符计数器是> 0,你应该自己添加一个\ 0。
答案 2 :(得分:1)
当你使用fgetc时,你正在构建一个逐字节保存字符串的内存,所以你需要让你的内存分配为总字符串长度+ 1,因为你想要终止字符'\ 0'的额外字节。
使用“string”的函数实际上是在查看以'\ 0'结尾的字节集合。因此,例如“Hello World”存储为'H''e''l'''o''''''''''''''''''0'在内存中;这就是函数如何知道何时停止处理字符串。