初学者的疑问(字符串大小4占满了数组大小,那'\0'放哪里,strlen()的值为什么是9 呢??请赐教;;

来源:百度知道 编辑:UC知道 时间:2024/06/13 19:35:50
#include<stdio.h>
main()
{char string[4]="qqqq";
printf("%d",strlen(string));}

strlen ( )【C语言库函数源代码】

【本程序在Dev C++ 4.9.9.2 下编译通过】

/*

得到字符串长度。(不含结束符 ‘\0’)

*/

int my_strlen(const char * str )

{

const char *p = str;

while( *p++ ) ;

return( (int)(p - str - 1) );

}

/*当然也可以采用下面的写法。*/

int my_strlen_01 ( const char * str )

{

const char *p = str;

while( *p ) p++;

return( (int)(p - str) );

}

int main()

{

char *str = "ammana_babi";

printf("%d\n",my_strlen(str));

printf("%d\n",my_strlen_01(str));

system("pause");

}

从上面得原代码可以看出strlen函数得计数原理是把\0的地址和字符串起始地址
作差得到的,而你所给的程序赋给数组的数据超过数组的大小,所以数组容量之外的'\0'并没有被赋值到数组里,这时用strlen函数检测出来的长度是数组起始地址算起到数组结束后之后的内存上数据出现'\0'的地址为止作差算出来的,而这个'\0'