如何在C中获取char阵列的第一个X元素?提升效果是否有改进的方法

How to get the first x elements of a char array in C? Is there an improved way with boost-libraries?

本文关键字:是否 方法 获取 char 第一个 阵列 元素      更新时间:2023-10-16

我的基本任务是将缓冲区阵列的子集获取到另一个缓冲区数组中:

char buffer[max_len];
unit8 *pDestBuffer;

我使用了此代码,因为我想留在ANSI-C:

memcpy(pDestBuffer, buffer, 4);

但是 - 一定有问题,因为我没有得到我的结果。因为,当我调试缓冲区时,我会看到数组的所有插槽 - 当我使用pdestbuffer执行此操作时,我只会得到一个项目 - 但是,我可以更改,但使用 memset(pDestBuffer,1,4)

之类的东西。

pdestbuffer是结构的一部分,除了上面的定义外,唯一对其的引用是这些行:

requiredMemory = sizeof(Structure) + bufferSize;
pStructure = (Structure *)HostMalloc(requiredMemory);
pStructure->pDestBuffer = ((uint8 *)pStructure)+sizeof(Sturcture);

我知道,这可能是一项基本任务,我自己正在研究这个任务,但是请,如果有"最佳实践",或者您知道解决方案,请与我分享。p>作为一个扭曲,我真的很想知道,如果使用Boost-libraries可能有改进的方法,我无论如何都可以将其用于其他问题。

您的代码正在工作。仅仅因为您的调试器看不到数据并不意味着它不存在。发生的事情是您的代码说uint8_t * pDestbuffer;,因此您的调试器认为PdestBuffer只是一个单个字节的指针,所以这就是它显示的。但是,您知道这实际上是一个数组的指针。

可能会有某种方式告诉您的调试器这是一个数组,因此您可以看到所有数据。例如,我知道的一个调试器会让您输入pStructure->pDestBuffer,4,说我向我展示四个字节,而不仅仅是一个字节。

我认为"最佳实践"不是混合C 和C代码。

#include <array>
#include <vector>
#include <algorithm>
std::array<char, len> buffer;
std::size_t n = 5;
std::vector<char> dest; // if n is dynamic
dest.reserve(n); // "performance"
std::copy(begin(buffer), buffer + n, std::back_inserter(dest));
// or even shorter
std::vector<char> dest{begin(buffer), buffer + n};

提升库是C 。这是C ?

您在标题中说C,而您的代码为C,但C 确实是一种不同的语言,具有不同的写作风格。

"看到所有插槽"是什么意思?如果您指的是Microsoft IDE,则您称为unit8*,您可能是指 uint8_t *或类似的指针,它可能是指指针,它可能将其解释为零端的字符串,但更有可能只是指针(由于其符号),并显示了什么它指出的不是数组的开始。