今天我的一塊代碼怪異的行爲窗戶回報的std ::矢量<std::string>返回垃圾
std::vector<std::string> getMACs() {
std::vector<std::string> macs;
for(/*something*/) {
char buffer[100];
sprintf_s(buffer, size, "get the mac address here");
std::string s = "";
s.append(buffer);
printf("mac=%s\n", s.c_str(); //print the mac address correctly
macs.push_back(s);
}
return macs;
}
int main(int, char**) {
std::vector<std::string> macs = getMACs();
for (size_t i = 0; i < mac.size(); i++) {
printf("mac=%s\n", macs[i]); //prints garbage
}
}
下,雖然在函數內部的MAC地址已正確打印,在打印無用爲主,只有我的解釋,即蘋果向量充滿垃圾字符串,但這怎麼會發生;對string.append(const char *)的調用雖然按引用傳遞,但push_back()函數應該調用字符串的拷貝構造函數,所以它不應再指向一個字符串引用,該字符串引用在離開範圍,對吧?
我假設你是 「迴歸」 荷蘭國際集團的Mac?不是嗎? –
請發佈一些真實,可編譯的代碼。 – jrok
這不能是你的實際代碼。請提供一個可編輯的例子。 –