Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C中获得字符数组的前x个元素?boost库有改进的方法吗?_C++_C_Arrays_Boost_Memcpy - Fatal编程技术网

C++ 如何在C中获得字符数组的前x个元素?boost库有改进的方法吗?

C++ 如何在C中获得字符数组的前x个元素?boost库有改进的方法吗?,c++,c,arrays,boost,memcpy,C++,C,Arrays,Boost,Memcpy,我的基本任务是将一个缓冲区数组的子集放入另一个缓冲区数组: char buffer[max_len]; unit8 *pDestBuffer; 我使用了这段代码,因为我想留在ANSI-C: memcpy(pDestBuffer, buffer, 4); 然而,一定是出了什么问题,因为我没有得到我期望的结果。因为,当我调试buffer时,我看到了数组的所有插槽-当我使用pDestBuffer执行此操作时,我只得到一个项目-但是我可以使用类似memset(pDestBuffer,1,4) pD

我的基本任务是将一个缓冲区数组的子集放入另一个缓冲区数组:

char buffer[max_len];

unit8 *pDestBuffer;
我使用了这段代码,因为我想留在ANSI-C:

memcpy(pDestBuffer, buffer, 4);
然而,一定是出了什么问题,因为我没有得到我期望的结果。因为,当我调试buffer时,我看到了数组的所有插槽-当我使用pDestBuffer执行此操作时,我只得到一个项目-但是我可以使用类似
memset(pDestBuffer,1,4)

pDestBuffer是结构的一部分,除了上面的定义之外,对它的唯一其他引用是以下几行:

requiredMemory = sizeof(Structure) + bufferSize;
pStructure = (Structure *)HostMalloc(requiredMemory);
pStructure->pDestBuffer = ((uint8 *)pStructure)+sizeof(Sturcture);
我知道,这可能是一项相当基本的任务,我自己也在做这项工作,但如果有“最佳实践”或您知道解决方案,请与我分享


作为一个转折点,我真的很想知道,是否有一种改进的方法,使用boost库,不管怎样,我都会使用它来解决其他问题。

您的代码正在工作。调试器看不到数据并不意味着数据不在那里。发生的事情是,您的代码显示
uint8\u t*pDestbuffer
所以调试器认为pDestBuffer只是一个指向单个字节的指针,所以它就是这样显示的。但是,您知道它实际上是指向数组的指针


可能有某种方法可以告诉调试器这是一个数组,以便您可以查看所有数据。例如,我知道的一个调试器会让您键入
psstructure->pDestBuffer,4
来告诉我四个字节,而不仅仅是一个。

您的代码正在工作。调试器看不到数据并不意味着数据不在那里。发生的事情是,您的代码显示
uint8\u t*pDestbuffer
所以调试器认为pDestBuffer只是一个指向单个字节的指针,所以它就是这样显示的。但是,您知道它实际上是指向数组的指针

可能有某种方法可以告诉调试器这是一个数组,以便您可以查看所有数据。例如,我知道的一个调试器会让你键入<代码> pSealth>PaseBuffic,4 < /COD>来显示四个字节,而不是仅仅一个字节。

< P>我认为“最佳实践”不是混合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};
#包括
#包括
#包括
std::数组缓冲区;
标准:尺寸n=5;
std::vector dest;//如果n是动态的
目的地保留地(n);//“性能”
std::copy(开始(缓冲区)、缓冲区+n、std::back_插入器(目的地));
//甚至更短
向量dest{begin(buffer),buffer+n};
我认为“最佳实践”不是混合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};
#包括
#包括
#包括
std::数组缓冲区;
标准:尺寸n=5;
std::vector dest;//如果n是动态的
目的地保留地(n);//“性能”
std::copy(开始(缓冲区)、缓冲区+n、std::back_插入器(目的地));
//甚至更短
向量dest{begin(buffer),buffer+n};

<>代码> Poost库是C++。这是C还是C++?< /P> <>你在标题中说C,你的代码是C,但是C++是一种不同的语言,有不同的写作风格。


你说的“看所有的插槽”是什么意思?如果你指的是微软IDE,你所说的UNIT8*,你可能指的是代码> UTI8*T*<代码>或类似,是指针,它可能把它解释为空终止字符串,但更可能只是指针(由于它的符号),并显示它指向的,而不是数组的开始。

<>你在标题中说C,你的代码是C,但是C++是一种不同的语言,有不同的写作风格。


你说的“看所有的插槽”是什么意思?如果您指的是Microsoft IDE,您所谓的unit8*可能是指
uint8\u t*
或类似的,它是一个指针,可能会将其解释为以null结尾的字符串,但更可能只是一个指针(由于其符号),并显示它指向的内容,而不是数组的开头。

标题引用C。代码是C。您的注释是“我想留在ANSI-C”。我看不出C++标记的原因。“我会把它拿走的。”罗布ᵩ 这使我的回答无效。如果OP出来确认了这一点,我会删除它。因为他想使用boost。我在Boost中没有看到任何C库,只有C++库。我会把标签放回去。一般来说,
memcpy
是为复制数据而优化的。对于小批量,您可以通过单独复制项目来提高效率。请记住,在调用和从
memcpy
返回时存在执行开销。标题引用C。代码是C。您的注释是“我想留在ANSI-C”。我看不出C++标记的原因。“我会把它拿走的。”罗布ᵩ 这使我的回答无效。如果OP出来确认了这一点,我会删除它。因为他想使用boost。我在Boost中没有看到任何C库,只有C++库。我会把标签放回去。一般来说,
memcpy
是为复制数据而优化的。对于小批量,您可以通过单独复制项目来提高效率。请记住,在调用和从
memcpy
返回时会有执行开销。另一种方法是打印
psstructure->pDestBuffer[0]
psstructure->pDestBuffer[1]
,等等
pDestBuffer,4
->就是黄金!谢谢你。你的观点类似于现金牛,而且很准确。我的输出中有一个bug,由于调试,我认为一切都错了。现在我知道不是这样,但是我的
memcopy
导致了pDest的错误内容-但这可能是由于错误的子例程调用造成的,我现在正在检查。另一种方法是打印
psstructure->pDestBuffer[0]
psstructure->pDestBuffer[1]
,等等
pDestBuffer,4
->就是黄金!谢谢你。你的观点类似于现金牛,而且很准确。我的输出中有一个bug,由于调试,我认为一切都错了。现在我知道了