printf("len of b is %d\n",sizeof(b));
首先,这个程序很有问题,可以说是完全错误的。
如果一个函数要返回其局部变量的地址,使用它的数据这个行为是未定义的,是要明令禁止的。
如果非要说fun
没问题的话(返回局部变量的地址乃是大忌),错就错在用了strlen
,它是根据\0
计算长度的,而你在赋值的过程中,压根没赋值过,所以长度是未定义的,但肯定是大于等于10。
用sizeof
也不行,因为b
是字符指针,它不是字符数组,无法使用sizeof
获取字符数组的真实大小,这个就陷入了死区。
总结一句:这个代码写除了函数/变量声明是对的,其他全是错误!
可以编译一下,然后把编译错误发给老师。
提出问题比解决问题更重要。我的建议:
1、建议函数内部的数组定义为static修饰的静态变量,这样内存不会被释放。
2、同1,可以动态分配用stdlib库中的malloc和free,函数内用malloc申请,main函数最后用free释放
3、sizeof的使用,我倾向直接改成10或者改成sizeof(a)/sizeof(char),
4、strlen使用的,需要在字符数组中的一个元素的赋值改成'\0',即字符串末尾是‘\0'
5、用整型赋值给char类型会发生类型转换,我倾向同类型或显式类型转换
6、没看到头文件的使用,添加stdio和string后可以运行,结果我没看过。