Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.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
检查const char*是否以零结尾_C_Char - Fatal编程技术网

检查const char*是否以零结尾

检查const char*是否以零结尾,c,char,C,Char,我在图书馆工作。 我有一个const char*,应该作为输入以零结尾,但是由于某些原因,它并不总是以零结尾 当它不是以零结尾时,调用未定义的行为-有时也会崩溃 尽管这是一个输入错误的问题--我不想崩溃,所以: 我的问题:有没有办法知道常量char*是否以零结尾?还是不是零终止?(我没有将const char*的长度作为输入) 另外,我发现有一种方法可以知道什么时候不是零终止->I崩溃:-) 我想在崩溃之前弄清楚:)以null结尾的字符串的全部用途是将\0作为最后一个字符,以便标记字符串的结尾,

我在图书馆工作。 我有一个
const char*
,应该作为输入以零结尾,但是由于某些原因,它并不总是以零结尾

当它不是以零结尾时,调用未定义的行为-有时也会崩溃

尽管这是一个输入错误的问题--我不想崩溃,所以:

我的问题:有没有办法知道
常量char*
是否以零结尾?还是不是零终止?(我没有将
const char*
的长度作为输入)

另外,我发现有一种方法可以知道什么时候不是零终止->I崩溃:-)
我想在崩溃之前弄清楚:)

以null结尾的字符串的全部用途是将
\0
作为最后一个字符,以便标记字符串的结尾,从而有一种确定字符数组结尾的方法

如果您不知道字符串的长度,并且字符串内容中没有任何内容可以确定其长度(例如,一个终止符字符,如
\0
),则您无法访问该字符串而不冒读取其分配内存的风险

在C语言中,访问分配内存块之外的数据是未定义的行为,您无法防止可能的崩溃。如果您的库函数被记录为接受以null结尾的字符串作为输入,用户有责任为您提供正确的输入,否则崩溃不是您的错


请注意,作为参考,所有正确的C字符串都应该是以null结尾的字符数组,并且在
string.h
中定义的所有标准字符串操作函数(
strcpy
strcmp
等)如果使用正确的以null结尾的字符串以外的任何对象调用,其行为都将相同。

不能使用指针“null终止”(无论这意味着什么)。它不是
NULL
终止的,它是ascii
nul
。不,您无法理解它,因为唯一确定的方法是搜索
nul
字符,如果它不存在,则肯定会调用未定义的行为。请阅读有关指针、空指针、宏
NULL
和“字符串”的信息这些都是非常基本的概念。如果不理解这些概念,您将无法正确使用C。
strchr(例如,'\n')!=NULL,但这不会导致未定义的行为。另一方面,缺少的
nul
肯定是一个问题。许多内置库函数就是这种情况,因为它们希望传递的字符串以nul结尾,否则它会崩溃。因此,在将参数传递给函数之前,应该小心