如何从字节数组的一部分获取char数组或char指针?假设我在字节数组中有可变大小的字符串,它从18个字节开始,从数组末尾结束4个字节。我怎么能得到这个?
编辑: 点呢?我应该在该字节数组中有点,但是当我通过memcpy复制时,我得到没有点的字符串。我该如何解决这个问题?
答案 0 :(得分:2)
您可以使用memcpy复制任意字节范围:
const int index1 = 18; // start index in src
const int index2 = 252; // end + 1 index in src
char src[256]; // source array
char dest[256]; // destination array
memcpy(dest, &src[index1], index2 - index1);
// copy bytes from src[index1] .. src[index2 - 1]
// inclusive to dest[0] .. dest[index2 - index1 - 1]
这将从src
复制索引18到251的字节,并将它们存储在dest
中。
答案 1 :(得分:2)
要提取数组的一部分,您可以使用memcpy
。
#include <string.h>
char dst[4];
/* Here, we can assume `src+18` and `dst` don't overlap. */
memcpy(dst, src + 18, 4);
C11(n1570),§7.24.2.1
memcpy
功能
memcpy
函数将s2
指向的对象中的n个字符复制到。{1}}中s1
指向的对象。如果在重叠的对象之间进行复制,则行为 未定义。
答案 2 :(得分:1)
memcpy
。它会满足你的问题
const char *buffer = "I AM A VERY VERY VERY VERY VERY VERY VERY VERY BIG STRING";
char buffer2[4];
memcpy(buffer2, (buffer+18), 4);
而范妮是你的姨妈。
答案 3 :(得分:0)
memcpy(目的地,来源,统计);
source+n
可以跳过n
个字节(您不应该超出源数组< /强>))一个小警告:如果目标与源相同,则必须将所有操作数保存在索引中。