strlen()输出不正确

use*_*508 -2 c strlen

我正在使用strlen()函数来打印字符串的大小,如下所示.

int main()

{

char c[]={1,2,3,4,5};  //same output if c[5]={1,2,3,4,5}

printf( "Length of string C is %d", strlen(c)); 


return 0; 
}
Run Code Online (Sandbox Code Playgroud)

产量

Length of string C is 19

为什么打印19?

Don*_*ild 7

在C中,字符串是以特殊字符'\0'(ASCII :)结尾的字符数组0.

char c[]={1,2,3,4,5}; 是一个字符数组.

要使其成为字符串,请将最后一个值设为0,即char c[]={1,2,3,4,5,0};或更好char c[]={1,2,3,4,5, '\0'};

现在你strlen没有工作,因为它通过搜索'\0'你没有在数组中提供的终结符来找到字符串的结尾.

它继续搜索'\0'(并导致数组元素的访问超出界限,这是一种未定义的行为,有时非常糟糕).它在第19个字符处找到它(通过运气)因此返回该结果.