У меня появилась следующая функция, которая случайным образом разбивается при преобразовании строки в wstring. Он используется для анализа HTTP-заголовков (http://www.codeproject.com/Articles/66625/A-Fully-Featured-Windows-HTTP-Wrapper-in-C) и всегда работал нормально, но он случайно переставал работать, когда я недавно менял сервер. (Этот код исходит из классов, которые входят в проект codeproject)Сбой при преобразовании строки в wstring
inline bool ParseRegExpW(const wstring ®Exp, bool caseSensitive, int groupCount, const wstring &source, vector<wstring> &result, bool allowDuplicate = false)
{
const string regEXP = string(regExp.begin(), regExp.end());
const string Source = string(source.begin(), source.end());
vector<string> Result;
if (result.size() != 0){
for (int i = 0; i < result.size(); i++) {
Result[i] = string(result[i].begin(), result[i].end());
}
}
bool res = ParseRegExp(regEXP, caseSensitive, groupCount, Source, Result, allowDuplicate);
if (Result.size() != 0){
for (int i = 0; i < Result.size(); i++) {
printf("Result: %i->%s L: %i : R %i r %i\n", i, Result[i].c_str(), Result[i].length(), Result.size(), result.size());//Result[i] contains what it should contain
if (i < Result.size()){
printf("Converting...\n");
result[i] = wstring(Result[i].begin(), Result[i].end());
printf("Will crash before getting there..\n");
}
}
}
return res;
}
Почему это происходит? Мне так странно, что последние месяцы работало нормально и перестало работать, когда я сменил сервер.
'operator []' does ** not ** добавить какие-либо новые элементы в 'std :: vector'. Так что если 'result.size()! = 0', это тоже сработает. –
'vector Результат:' создает вектор нулевого размера. Вы должны использовать 'Result.push_back()' вместо 'Result [i]' при добавлении содержимого. –
Кроме того, наличие как результата «результата», так и «результата» просто требует опечатки или двух! –