void main()
{
char s1[10] = { “m”, “o”, “b”, “i”, “l” };
char s2[20] = { “A”, “N”, “S”, “I”, “\0”, “C”, “+”, “+” };
char s3[6] = { “I”, “S”, “O”, “C”, “+”, “+” };
printf(“%d\n”, strlen(s1));
printf(“%d\n”, strlen(s2));
printf(“%d\n”, strlen(s3));
system(“pause”);
}
为什么本人的vs2013跑的 s3的大小是20
{
char s1[10] = { “m”, “o”, “b”, “i”, “l” };
char s2[20] = { “A”, “N”, “S”, “I”, “\0”, “C”, “+”, “+” };
char s3[6] = { “I”, “S”, “O”, “C”, “+”, “+” };
printf(“%d\n”, strlen(s1));
printf(“%d\n”, strlen(s2));
printf(“%d\n”, strlen(s3));
system(“pause”);
}
为什么本人的vs2013跑的 s3的大小是20
解决方案
5
已经超出数据范围,结果不确定
char s3[7] = { “I”, “S”, “O”, “C”, “+”, “+” };
char s3[7] = { “I”, “S”, “O”, “C”, “+”, “+” };
5
strlen碰到0才算结束……
你的字符串中没有0,所以会越界查找,直接有找到0为止。
你的字符串中没有0,所以会越界查找,直接有找到0为止。
10
char s3[6] = { “I”, “S”, “O”, “C”, “+”, “+” };你这样写,使得s3这个数组没有”\0″结尾
那执行strlen的时候就是看脸了,返回一个什么值都有可能
那执行strlen的时候就是看脸了,返回一个什么值都有可能
5
strlen是以”\0″为终结的,和sizeof不同。