2 xh931076284 xh931076284 于 2015.07.21 22:25 提问

c++字符数组赋值 内存分配

string str1="1234.56";
char ch[str1.length()+1];
double dtude=atof(str1.c_str());
sprintf(ch, "%.5f", dtude);
cout<<ch<<endl;
运行的结果为:1234.56000

但是实际上,ch的大小是8,却存储了10个元素。valgrind 也没有检测到内存非法读写的问题,运行都正常,有大神知道这是什么原因吗?

5个回答

caozhy
caozhy   Ds   Rxr 2015.07.22 06:22

C语言是一种简陋而充满陷阱的语言,它需要程序员格外小心,而不是依赖完备的运行时检查和编译检查。

oyljerry
oyljerry   Ds   Rxr 2015.07.21 22:53

刚好越界后空间你可以访问而已,但这个不保证,也说不定后面代码会用到越界的地方就有问题了。

wjq
wjq   2015.07.21 22:59

你越界访问是可以,但越界之后的那段内存区域随时可能被其他声明的变量占用并修改相应的值。也就是说你越界储存或者读取的数据是不可靠的

CSDNXIAON
CSDNXIAON   2015.07.21 22:28

字符指针与字符数组内存分配的区别
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

hatlonely
hatlonely   2015.07.21 22:50

不要使用sprintf函数,用snprintf代替

Csdn user default icon
上传中...
上传图片
插入图片