今日、ウィンドウの下でピースコードの奇妙な動作がありました
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()関数はstringのコピーコンストラクターを呼び出す必要があるため、離れた後にガベージになる文字列参照をこれ以上指し示すべきではありません。スコープでしょ?