NULL 的字符串长度

String length of a NULL

我试图找到 NULL""

的字符串长度

当我尝试 a=strlen(""); 时,我的输出为零。 当我尝试 a=strlen(NULL); 时,出现核心转储错误。

这两个语句到底发生了什么?内存会分配给 ""

文字 "" 是一个空终止字符串,由长度为一的数组和空终止字符 '[=11=]' 组成。另一方面,NULL 是空指针,而不是空终止字符串。它不指向内存中的任何有效位置,并且不能取消引用。

strlen 要求它的参数是一个空终止字符串,否则它会产生 未定义的行为 (UB)。在这种情况下,UB 很可能是由取消引用 NULL 指针引起的。最重要的是,您只能传递以 null 结尾的字符串,否则所有赌注都会被取消。

strlen() 的定义指出,

size_t strlen( const char *str );

它将returns C 字符串的长度str。但是

The behavior is undefined if there is no null character in the character array pointed to by str.

a=strlen(NULL);

NULL空指针,不指向任何东西)没有空字符,所以您发现了未定义的行为。

strlen 给出字符串的长度,直到 '[=11=]' 表示字符串终止。

NULL 是一个空指针。它是一个常量,在 stdio.h 中定义。因此 strlen 给出未定义的行为。

其中 "" 是包含 null character 的字符串,因此 strlen 给出 0.