读书人

求教两个小疑点

发布时间: 2013-03-20 15:25:24 作者: rapoo

求教两个小问题
char* s2 = new char[80];
int i = strlen(s2);
为什么i是96;
char s3[80];
int i = strlen(s3);
为什么i是91;


不能理解,求教!!!!
[解决办法]
strlen是遇到 '\0'就结束,而对于刚new出来的内存,它们里面是什么内容其实是不一定的。
也就是说,你这里i是多少都有可能
[解决办法]
初始化问题。定义了以后没有初始化,其中的内容不确定。strlen的原理就是从指定的地址开始计算,如果字符是'\0'就停止计算,输出计算的值。这样以后就都是0了

    char* s2 = new char[80];
memset(s2 ,0 ,80);
int i = strlen(s2);
char s3[80] = {0};
int j = strlen(s3);

[解决办法]
局部内部类型定义变量时不会自动进行初始化,所有对未初始化的变量的操作(除赋值)都是未定义的,结果未知,一切皆有可能
[解决办法]
数组木有初始化

strlen()是判断到'\0'为止的

没有初始化,那么'\0'有可能在这块内存中,也有可能在这块内存之外

读书人网 >C语言

热点推荐