【发布时间】:2013-11-29 06:15:51
【问题描述】:
#include <cstdio>
#include <iostream>
using namespace std;
int main ()
{
char buffer [1];
sprintf (buffer, "%d is one number", 1);
cout<<buffer<<endl;
return 0;
}
buffer 的大小只有一个,但cout 可以打印正确的结果。为什么?
这样做安全吗?或者我在使用char *相关方法时必须考虑为缓冲区设置一个大尺寸?
【问题讨论】:
-
你可以在 C++ 中自爆。您超出了
buffer数组,但显然这并没有在运行时造成严重到足以导致程序运行异常的问题。就cout而言,buffer只是一个指向以空字符结尾的字符串的指针。 -
不对;这是未定义的行为,就是这样:undefined.