jCu*_*uga 3 c++ string casting unsigned-char
假设我有一个unsigned char*,我们称之为:some_data
unsigned char* some_data;
Run Code Online (Sandbox Code Playgroud)
some_data中包含类似url的数据.例如:
"aasdASDASsdfasdfasdf&Foo=cow&asdfasasdfadsfdsafasd"
Run Code Online (Sandbox Code Playgroud)
我有一个函数可以获取'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;
}
Run Code Online (Sandbox Code Playgroud)
麻烦的是我需要一个字符串传递给这个函数,或者至少一个char*(可以转换为字符串没问题).
我可以通过强制转换解决这个问题:
reinterpret_cast<char *>(some_data)
Run Code Online (Sandbox Code Playgroud)
然后把它传递给函数okie-dokie
...
直到我使用valgrind并发现这可能导致细微的内存泄漏.
Conditional jump or move depends on uninitialised value(s) __GI_strlen
Run Code Online (Sandbox Code Playgroud)
从我收集的内容来看,它与重新解释的内容有关,搞乱了表示字符串结尾的空值.因此,当c ++试图找出字符串的长度时,搞砸了.
鉴于我无法改变some_data由unsigned char*表示的事实,有没有办法使用我的grabFooValue函数而没有这些微妙的问题?
我更喜欢保留我已经拥有的值查找函数,除非有明显更好的方法来从这个(有时很大的)unsigned char*中删除foo值.
尽管unsigned char*some_data的变化很大,有时也很大,我可以假设'foo'的值在早期的某个地方,所以我的想法是尝试获得前面X个字符的char*无符号的字符*.这可能通过让我设置char*结束的位置来消除字符串长度问题.
我尝试使用strncpy和cast的组合,但到目前为止还没有骰子.有什么想法吗?
您需要知道unsigned char*指向的数据的长度,因为它不是0终止的.
然后,使用例如:
std::string s((char *) some_data, (char *) some_data + len);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
398 次 |
| 最近记录: |