Предположим, что у меня есть неподписанный символ *, давайте назовем его: some_data
unsigned char* some_data;
И some_data содержит в себе url-подобные данные. например:
"aasdASDASsdfasdfasdf&Foo=cow&asdfasasdfadsfdsafasd"
У меня есть функция, которая может получить значение 'foo' следующим образом:
// looks for the value of 'foo'
bool grabFooValue(const std::string& p_string, std::string& p_foo_value)
{
size_t start = p_string.find("Foo="), end;
if(start == std::string::npos)
return false;
start += 4;
end = p_string.find_first_of("& ", start);
p_foo_value = p_string.substr(start, end - start);
return true;
}
Проблема в том, что мне нужна строка для передачи в эту функцию или хотя бы символ * (который может быть преобразован в строку без проблем).
Я могу решить эту проблему, применив:
reinterpret_cast<char *>(some_data)
А затем передать его функции все окей-доки
...
Пока я не использовал valgrind и не обнаружил, что это может привести к незначительной утечке памяти.
Conditional jump or move depends on uninitialised value(s) __GI_strlen
Из того, что я собрал, это связано с переинтерпретацией кастинга, который испортил ноль, указывающий конец строки. Таким образом, когда c ++ пытается выяснить длину строки, она становится бесполезной.
Учитывая, что я не могу изменить тот факт, что some_data представляется беззнаковым символом *, есть ли способ использовать мою функцию grabFooValue, не имея таких тонких проблем?
Я бы предпочел сохранить имеющуюся у меня функцию поиска значений, если только нет явно лучшего способа вырвать значение foo из этого (иногда большого) беззнакового символа *.
И несмотря на то, что unsigned char * some_data варьируется, а иногда и имеет большой размер, я могу предположить, что значение 'foo' будет где-то на раннем этапе, поэтому я подумал о том, чтобы попытаться получить char * первого X символы знака без знака *. Это потенциально может избавить от проблемы длины строки, если указать, где заканчивается символ *.
Я пытался использовать комбинацию strncpy и casting, но пока без кубиков. Есть мысли?