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 也没有检测到内存非法读写的问题,运行都正常,有大神知道这是什么原因吗?
不要使用sprintf
函数,用snprintf
代替
刚好越界后空间你可以访问而已,但这个不保证,也说不定后面代码会用到越界的地方就有问题了。
你越界访问是可以,但越界之后的那段内存区域随时可能被其他声明的变量占用并修改相应的值。也就是说你越界储存或者读取的数据是不可靠的
C语言是一种简陋而充满陷阱的语言,它需要程序员格外小心,而不是依赖完备的运行时检查和编译检查。