读书人

为什么答案是15?该怎么解决

发布时间: 2012-03-24 14:00:46 作者: rapoo

为什么答案是15?
#include<stdio.h>
int main()
{
char a[10];//未初始化怎么会是15呢
char b[10]="AAAAAAAAAAAAAAAAAAAA";//为什么不越界???????
printf("%d ",strlen(a));
}

[解决办法]

探讨
#include<stdio.h>
int main()
{
char a[10];//未初始化怎么会是15呢
char b[10]="AAAAAAAAAAAAAAAAAAAA";//为什么不越界???????
printf("%d ",strlen(a));
}

[解决办法]
探讨

引用:
char a[10];//未初始化,strlen(a) = 15,只能说明其他的都不是'\0',第十五位才是。。。这就是因为未初始化的原因,而strlen是从a的首地址开始,直到遇到'\0'为止的长度

我想问一下对于a[10]不初始化 是固定15吗?

[解决办法]
这个是越界了,会占用数组后面内存,会出现未定义的错误。
也有可能恰好没有占用有用的内存所以没有报错。
而strlen这个函数是字符串的长度,遇到'\0'才结束,不管是否到数组的结尾。
[解决办法]
探讨

引用:
#include<stdio.h>
int main()
{
char a[10];//未初始化怎么会是15呢
char b[10]="AAAAAAAAAAAAAAAAAAAA";//为什么不越界???????
printf("%d ",strlen(a));
}

1)数组a没有初始化,其中的数据是内存中的垃圾数据,是随机的;
2)C/C……

[解决办法]
C/C++ code
永远不要忘记字符串结束符 null在使用处理 C 风格字符串的标准库函数时,牢记字符串必须以结束符 null结束:char ca[] = {'C', '+', '+'}; // not null-terminatedcout << strlen(ca) << endl; // disaster: ca isn'tnull-terminated在这个例题中,ca 是一个没有 null 结束符的字符数组,则计算的结果不可预料。标准库函数 strlen 总是假定其参数字符串以 null 字符结束,当调用该标准库函数时,系统将会从实参 ca 指向的内存空间开始一直搜索结束符,直到恰好遇到 null 为止。strlen 返回这一段内存空间中总共有多少个字符,无论如何这个数值不可能是正确的。 

读书人网 >C++

热点推荐