C - 从字节数组的一部分获取字符

时间:2012-11-18 18:36:12

标签: c pointers char bytearray

如何从字节数组的一部分获取char数组或char指针?假设我在字节数组中有可变大小的字符串,它从18个字节开始,从数组末尾结束4个字节。我怎么能得到这个?

编辑: 点呢?我应该在该字节数组中有点,但是当我通过memcpy复制时,我得到没有点的字符串。我该如何解决这个问题?

4 个答案:

答案 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.1memcpy功能
  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(目的地,来源,统计);

  • 目的地=存储区域(!important destination_SIZE&gt; = count)
  • Source =保存要复制的数据的数组(默认起始索引= 0,但source+n可以跳过n个字节(您不应该超出源数组< /强>))
  • count =将复制多少字节。

一个小警告:如果目标与源相同,则必须将所有操作数保存在索引中。