strlen()输出不正确

时间:2014-07-26 12:17:47

标签: 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; 
}

输出

Length of string C is 19

为什么打印19?

1 个答案:

答案 0 :(得分: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个字符处找到它(通过运气),因此返回该结果。