colours
ist ein std::map<string, string>
, wobei das erste Element jedes Paares ein 2-stelliger std::string
Farbcode ist und das zweite Element der 7-stellige std::string
Shell-Escape-Code für diese Farbe ist.Warum sucht und ersetzt diese Zeichenfolge segfault?
size_t i;
for(map<string, string>::iterator iter = colours.begin(); iter != colours.end(); iter++) {
while((i = text.find(iter->first)) != string::npos) {
text.replace(i, i + sizeof(iter->first), iter->second);
}
}
Wenn dieser Code ausgeführt wird, wird das Programm segfolds. Meine beste Vermutung ist, dass es etwas damit zu tun hat, dass die Länge der Ersetzungszeichenfolge länger ist als die Länge der zu ersetzenden Zeichenfolge, aber nach meinem besten Wissen nur mit char *
, nicht std::string
.
Danke, ich habe die von Ihnen vorgeschlagenen Änderungen vorgenommen, aber das Programm segmentiert immer noch diesen Code. –
@Not Joe Bloggs, hmm. Führen Sie einen Debugger aus, um herauszufinden, welche Bedingungen den Fehler verursachen. – luqui
@Not Joe Bloggs Können Sie eine Eingabe geben, die zu einem Segfault führt? – marcog