J'ai eu un comportement bizarre d'un code de pièce aujourd'hui sous windowsretour std :: vecteur <std::string> retourne ordures
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
}
}
bien que l'adresse MAC dans la fonction a été correctement imprimé, dans la principale, il imprime des déchets, la seule explication que j'ai, que le vecteur macs est plein de chaînes de déchets, mais comment cela peut-il arriver; un appel à string.append (const char *), bien qu'il passe par référence, la fonction push_back() devrait appeler le constructeur de la chaîne de copie, et ne devrait donc plus pointer vers une référence de chaîne qui deviendra une poubelle après avoir quitté le portée, non?
Je suppose que vous êtes macs ing "retour"? pas s? –
Veuillez poster un code réel, compilable. – jrok
Ce code ne peut pas être votre code actuel. S'il vous plaît fournir un exemple compilable. –