Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何知道字符串是否以null结尾?_C_String - Fatal编程技术网

C 如何知道字符串是否以null结尾?

C 如何知道字符串是否以null结尾?,c,string,C,String,我正在使用fgetc从文件中读取字符串。由于我不知道字符串的长度,我需要重新分配用于存储数据的数组的空间。为此,我需要知道当前阵列何时已满。我不太确定读取字符后字符数组是否以null结尾。例如,我有一个大小为8的数组,fgetc将给我第9个字符。现在阵列的大小是8还是9?(8个字符+\0或仅8个字符)。有没有办法测试它?如果没有\0。当我完成读取字符串时,是否需要自己将其添加到字符数组中?由于fgetc每次调用读取一个字符,要获得字符串的大小,应将读取字符检查为\0或EOF。如果看到\0字节,则

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

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

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

使用fgetc时,您正在构建一个字节一个字节保存字符串的内存,因此,您需要将内存分配为字符串总长度+1,因为您需要为终止字符“\0”添加额外的字节


使用“string”的函数实际上是查看以“\0”结尾的字节集合。例如,“Hello World”在内存中存储为“H”“e”“l”“l”“o”“W”“o”“r”“l”“d”“\0”;这就是函数知道何时停止处理字符串的方式。

所有标准字符串函数都依赖于其中一个空字符,因此必须添加它,否则会出现奇怪的问题