Мы видим странный сценарий, который сводится к следующему:
std::string something = "someval";
std::stringstream s;
s << something;
std::cout << s.str();
не равно:
std::string something = "someval";
std::stringstream s;
s << something.c_str();
std::cout << s.str();
Если сделать еще один шаг - в любом случае результат не будет бессмысленным. Что происходит, так это то, что выходные данные в случае 1 отображаются в другую (допустимую) строку в системе, тогда как выходные данные в случае 2 соответствуют ожидаемым.
Мы видим это поведение простым изменением:
s << something;
Кому:
s << something.c_str();
Я знаю, что это звучит безумно (или это относится ко мне), и я не смог воспроизвести это из более крупной системы - так что извините за отсутствие "рабочего" примера. Но кто-нибудь знает, как это может произойти? Можем ли мы где-нибудь наступить на память или сделать что-то для stringtable в каком-то месте или что-нибудь еще в этом роде?