想要使用strcpy()把字符数组a赋值给b,有点疑问:
char a[]="abcdef";
char b[]="666";
strcpy(b,a);
然后程序正常执行。
我认为:从道理上讲b的长度是不够的,也就是说其实程序使用了数组b目前地址的后几个才存放的多余数字。因为这部分内存暂时没用所以输出正常。
请问我的理解对不对?如果不对,那事实是怎样的?如果对,我要如何修改代码使结果安全,在不使用其他数据结构(比如vector)的基础上。
先谢谢大家了。
想要使用strcpy()把字符数组a赋值给b,有点疑问:
char a[]="abcdef";
char b[]="666";
strcpy(b,a);
然后程序正常执行。
我认为:从道理上讲b的长度是不够的,也就是说其实程序使用了数组b目前地址的后几个才存放的多余数字。因为这部分内存暂时没用所以输出正常。
请问我的理解对不对?如果不对,那事实是怎样的?如果对,我要如何修改代码使结果安全,在不使用其他数据结构(比如vector)的基础上。
先谢谢大家了。
这种将长字符串赋值给短字符串是不允许的,会造成内存溢出,访问不该访问的地方,造成无法预料的结果。但是,C库的strcpy()调用实际上不会检查Null结束字符串的长度是否溢出。g++编译器的内部处理
如果你考虑到vector的话,就已经是C++的范畴了。在C++中,你可以使用标准库中的string模板类进行方便的字符串操作,既保证了与C语言Null结束字符串的兼容,有保证了溢出等不安全代码的发现,非常推荐。
2 回答1.6k 阅读✓ 已解决
2 回答944 阅读✓ 已解决
2 回答2.8k 阅读
1 回答1.5k 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
1 回答1.1k 阅读
1 回答861 阅读
遇到这类问题可以先自己查查