c++ - 当我需要一个字符串时,我可以用 unsigned char* 做什么?

标签 c++ string casting unsigned-char

假设我有一个unsigned char*,我们称它为: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;
}

问题是我需要一个字符串传递给这个函数,或者至少是一个 char*(可以转换成字符串没问题)。

我可以通过转换来解决这个问题:

reinterpret_cast<char *>(some_data)

然后传给函数all okie-dokie

...

直到我使用 valgrind 并发现这会导致微妙的内存泄漏。

Conditional jump or move depends on uninitialised value(s)  __GI_strlen

根据我收集到的信息,它与重新解释转换弄乱了指示字符串结尾的空值有关。因此,当 c++ 试图计算出字符串的长度时,事情就变得很麻烦了。

鉴于我无法改变 some_data 由 unsigned char* 表示的事实,是否有一种方法可以在没有这些细微问题的情况下使用我的 grabFooValue 函数?

我宁愿保留我已经拥有的值查找功能,除非显然有更好的方法从这个(有时很大)unsigned char* 中提取 foo 值。

尽管 unsigned char* some_data 不断变化,有时大小很大,但我可以假设 'foo' 的值早早出现在某个地方,所以我的想法是尝试获取第一个 X 的 char* unsigned char* 的字符。通过让我设置 char* 结束的位置,这可能会消除字符串长度问题。

我尝试结合使用 strncpy 和转换,但到目前为止还没有成功。有什么想法吗?

最佳答案

您需要知道 unsigned char * 指向的数据的长度,因为它不是以 0 结尾的。

然后,使用例如:

std::string s((char *) some_data, (char *) some_data + len);

关于c++ - 当我需要一个字符串时,我可以用 unsigned char* 做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5047783/

相关文章:

c++ - 在 Linux 或 Windows 中的精确时间段安排任务

c++ - 在 HPC 上部署 C++ (MPI) 时如何避免问题

c# - 替换一个子字符串的值,但一个

C 不兼容的整数到指针转换,将 'int' 传递给类型 'const char *' 的参数;

ios - 如何向下转换为 [String : String] in a for in loop?

c - 在 C 中类型转换 pthread 的返回值时出现意外结果

c++ - 什么是内联命名空间?

C++:const 的静态分析?

c++ - 分解长字符串

java - 细化代码。搜索字符串