带两个0x00字节的前缀无符号char指针数组

例如,如果我有一个值为unsigned char *str的{​​{1}},该如何为该数组加上两个空字节作为前缀,这样该数组将变成0x68 0x65 0x6C 0x6C 0x6F[0x00 0x00] 0x68 0x65 0x6C 0x6C 0x6F =添加字节)?

我尝试使用[],但是由于我想strcat字节被视为字符串终止符,因此无法产生预期的结果。

jinjbnu 回答:带两个0x00字节的前缀无符号char指针数组

函数strcat用于处理字符串,即以零结尾的字符数组。由于您的数组不是以零结尾的,因此您不应使用此函数。

相反,如果要避免手动编码运动,则可以使用memmovememset函数。但是,您需要声明str数组,且其大小为(更大)(以适应添加的字节)。 因此,例如:

unsigned char str[7] = { 0x68,0x65,0x6C,0x6F,}; // Note: size must be at least 7
//.. some code
memmove(str+2,str,5); // Shift along by two bytes (see note,below)
memset(str,2);      // Add the two 'prefix' zeros

请注意,memmove函数是safe with overlapping buffers(在我的脑海中):

将num字节的值从源指向的位置复制到 目标指向的内存块。
复制发生在 如果使用了中间缓冲区,则允许目的地和 源重叠。

但是,这仅适用于功能memmove,不适用于功能memcpy。使用函数memcpy,缓冲区重叠是不安全的。

此外,请注意,unsigned char *str并未声明数组(尽管您可以对string literals使用类似的语法)。您需要使用已发布代码的(现在已更正)版本。

本文链接:https://www.f2er.com/2743767.html

大家都在问