#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
可以打印正確的結果是小。爲什麼?爲什麼它是正確的緩衝區大小下使用時的sprintf ++
安全嗎?或者在使用char *
相關方法時,我不得不考慮爲緩衝區設置一個大尺寸?
參考 http://stackoverflow.com/questions/3919995/determining-sprintf-buffer-size-whats-the-standard – Bunny
你被允許拍攝自己的腳在C++中。你超越了'buffer'數組,但顯然這在運行時不會引起足夠嚴重的問題,導致程序運行異常。就「cout」而言,「buffer」只是一個指向空終止字符串的指針。 –
這是不對的;這是未定義的行爲,只是:[undefined](http:// stackoverflow。COM /問題/ 2397984 /不確定的,非指定和實現定義的行爲/ 4105123#4105123)。 – WhozCraig