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
.
我试图找到 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
.