我正在研究其他人開發的C++代碼,並找到了一個部分,其中std::string
被分配給一個不以NULL結尾的char
數組。代碼(簡體)是這樣的:將std :: string分配給非終止字符數組時的預期行爲?
char *filePath="c:\\filename.txt"; //file known to contain 20 chars per line.
int size=20;
char *buffer;
std::string bufferstr;
buffer=new char[size];
std::ifstream input(filePath, std::ios::in | std::ios::binary);
input.read(buffer,size);
bufferstr=buffer; // Assign string to non-null-terminated char array.
// Lots of other code omitted here.
input.close();
delete[] buffer;
我並不驚訝地發現,檢查與內存博士代碼的時候,和現在已經改變了這種所以內存的錯誤,buffer
始終是空值終止,但該代碼已經有3年左右的這個錯誤,並且在我最近對代碼中一個看似不相關的部分進行了更改之前,已經按照預期行事(在Windows,Linux和Solaris上)。
我的問題是:
- 什麼是分配std::string
到非空值終止char
陣列時,預期的行爲?
- 爲什麼此代碼在其他地方進行更改後會開始行爲不當?
那麼,未定義的行爲仍然可以_work_。 –
總是置零分配內存的好理由。不要將分配的內存置零的一個很好的理由。 –