gpt4 book ai didi

c++ - 将 char* 值存储到 unsigned char** 数组中

转载 作者:行者123 更新时间:2023-11-28 05:43:49 24 4
gpt4 key购买 nike

我正在为第三方 .dll 创建一个 C++ 包装器,以便将其与 C# P/Invoke 一起使用。为此,我可以访问使用此 .dll 的演示应用程序,但由于我不是 C 语言专家,所以我非常依赖此代码。一切正常,但几周前,我发现了一些我觉得很奇怪的代码:

unsigned char** ppucValues = new unsigned char*[iSize];
for(int i = 0; i < iSize; i++){
ppucValues[i] = (unsigned char *)new int;
*(int *)ppucValues[i] = piValues[i]; //(piValues is int*)
}

for 循环中的那些行让我困惑了一段时间,但仔细观察第一行,我想“嘿,那一定意味着一个 unsigned char 指向一个 int...对吧?¹”

是的,我对此还不是很确定,但我对几种不同的类型使用了相同的概念并且它有效。如果有人想知道其中的原因,我必须将不同类型的值存储到这个 unsigned char** 中,并将它提前传递给第三方 .dll 中的一个方法,显然,这个 unsigned char**。这就是制造商在他们的演示应用程序中所做的,所以我只是继续这样做。

有了这个,我的问题就来了:我必须做同样的操作,但现在我使用的是 char**(字符串数组)而不是 int* 或 double* 或其他任何东西。根据我刚才所说的,这就是我想出的:

for(int i = 0; i < iSize ; i++){
ppucValues[i] = (unsigned char *) new char*; //type of ppucValues as unsigned char** and type of ppucValues[i] as char*???
*(char **)ppucValues[i] = ppcValues[i]; //Hmmm... what?!
}

但它并没有像我预期的那样工作(更不用说我对此只有 50% 的信心)。例如,如果我的输入 (ppcValues[i]) 是“test”,我的输出 (ppucValues[i]) 结果是“¨Ô4”。我可能会建议这是一个与 C++ 或其指针无关的编码问题,但我会向 StackOverflow 的好心人提出建议。任何帮助将不胜感激。

¹如有错误,请赐教!

最佳答案

如果没有更多上下文,很难给出明确的解决方案,但如果 ppcValues 的生命周期至少与 ppucValues 一样长(或更长,或当然),它是就像复制指针一样简单,比如

for(int i = 0; i < iSize ; i++){
ppucValues[i] = reinterpret_cast<unsigned char*>(ppcValues[i]);
}

如果 ppcValues 的生命周期比 ppucValues 的生命周期,那么你需要分配足够的内存来容纳所有数据ppcValues[i] 并复制它:

for(int i = 0; i < iSize ; i++){
ppucValues[i] = new unsigned char[length_of(ppcValues[i])];
std::copy_n(reinterpret_cast<unsigned char*>(ppcValues[i]), ppucValues[i], length_of(ppcValues[i]));
}

length_of 函数取决于ppcValues[i] 的内容。如果它是 C 风格的字符串,那么您应该使用 strlen(ppcValues[i]) + 1

另请注意,如果您使用 new[] 进行分配,则需要使用 delete[] 进行释放。

关于c++ - 将 char* 值存储到 unsigned char** 数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36625818/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com