我今天在windows下有一段代码的奇怪行为
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地址已经正确打印,但主要是打印垃圾,我唯一的解释是macs向量充满了垃圾字符串,但怎么会发生这种情况;对 string.append(const char*) 的调用,虽然通过引用传递,但 push_back() 函数应该调用 string 的复制构造函数,因此它不应该再指向一个在离开后会变成垃圾的字符串引用范围,对吧?