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

3

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

编辑: 那么点(dot)怎么办?我应该在字节数组中有点,但是当我用memcpy复制时,我的字符串没有点。我该怎么解决这个问题?


我尝试使用循环并逐字节复制。我忘记了memcpy函数。 - Libor Zapletal
"点"的意思是什么? - Paul R
4个回答

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]

这将从索引18到251复制来自src的字节,并将其存储在dest中。


你在哪个部分遇到了困难? - Paul R
memcpy(dest, index2-index1 的问题在这里, &src[index1]) 部分 - Aniket Inge
我认为你在memcpy中交换了第二个和第三个参数,但这不是问题。我又遇到了一个问题,在问题编辑中进行了描述,请看一下。 - Libor Zapletal

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个字符到s1指向的对象中。如果在重叠的对象之间进行复制,则行为未定义。


是的,memcpy有帮助,但我想进一步提出我的问题。请看上面。 - Libor Zapletal

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);

就这么轻松愉快。


0

memcpy(destination, source, count);

  • Destination = 存储区域 (!important 目标存储区域大小 destination_SIZE >= count)
  • Source = 包含要复制数据的数组 (默认起始索引为0,但source+n可以跳过n个字节(不应超出源数组))
  • count = 将要复制的字节数。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接