字符串长度为NULL

时间:2015-07-30 16:31:07

标签: c string string-length

我试图找到NULL""

的字符串长度

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

这两个陈述究竟发生了什么?内存是否会分配给""

3 个答案:

答案 0 :(得分:6)

文字""是一个以空字符结尾的字符串,由长度为一的数组组成,其中包含空终止字符'\0'。另一方面,NULL是空指针,而不是以空字符结尾的字符串。它没有指向内存中的任何有效位置,也无法取消引用。

strlen要求其参数为空终止字符串,否则会产生未定义行为(UB)。在这种情况下,UB很可能是由取消引用NULL指针引起的。最重要的是,您只能传递以空值终止的字符串或所有投注都已关闭。

答案 1 :(得分:1)

strlen()的定义表明,

size_t strlen( const char *str );

它将返回C字符串str的长度。但

  

如果str指向的字符数组中没有空字符,则行为未定义。

a=strlen(NULL);

NULL空指针,不指向任何内容)没有空字符,因此您发现了未定义的行为。

答案 2 :(得分:1)

strlen给出字符串的长度,直到'\0'表示字符串终止。

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

其中""是包含null character的字符串,因此strlen提供0