c++改变const char中的值

C++ change value in const char

本文关键字:char 改变 const c++      更新时间:2023-10-16

我有一个const char

const char example[] = "x4Dx5AxE8x00x00x00x00x5Bx52x45x55x89xE5x81xC3";

DWORD* example2 = "xAAxBBxCCxDD";

,我想将example1的最后4个字节更改为example2的最后4个字节我能用c++做什么?

我试过memcpy, strcpystrcpy_s没有运气

你不应该修改常量数组!
修改固有常量对象/变量会导致未定义行为
千万别这么做。创建它的副本并修改该副本,或者如果您想修改相同的数组,则不将其声明为const

    不要修改常量字符串。
  1. const char example[] = "x4Dx5AxE8x00x00x00x00x5Bx52x45x55x89xE5x81xC3";在这里,你的字符串有几个NULL字符串终止符。这将不适用于<string.h>中的函数(如strlen()和其他)
  2. 使用memcpy, memset函数只在知道二进制字符串的长度后才追加。
  3. 将结果存储在字符数组中,但不要假设它将作为常规字符串工作,因为您的数据。

你的example[]字符数组被定义为const,所以你不能修改它。

1)如果您以这种方式更改const char数组,您应该在编译中得到一个错误

example[2] ='R';

2)如果你通过memcpystrcpy修改const char数组,你应该得到一个警告

改为

char example[] = "x4Dx5AxE8x00x00x00x00x5Bx52x45x55x89xE5x81xC3";

你不能使用strcpy,因为你的字符数组在中间包含x00,所以这将影响strcpy函数。因为当strcpy在char数组

中找到x00时,它会停止

example[] char数组中间包含x00,用strlen查找example[]的长度将无法正常工作。对于这种情况,我建议使用sizeof(example)代替。

下面是如何制作副本:

char example[] = "x4Dx5AxE8x00x00x00x00x5Bx52x45x55x89xE5x81xC3";
DWORD* example2 = "xAAxBBxCCxDD";
if (sizeof(example)>=sizeof(example2))
     memcpy(example+sizeof(example)-sizeof(example2), example2, sizeof(example2));

不能更改Const变量。这是设计好的。对于c类型的string对象,可以使用string类型const的内容,也可以使用指向string类型const的指针。

由于将其定义为const字符数组,因此指针隐式为const,而内容显式为const。

const char * const mystring = "hello"

在这种情况下,第一个"const"试图应用于左(没有),所以它应用于右(char类型)。所以字符串的内容可能不会改变。第二个const尝试向左应用,所以它使指针本身成为const。这意味着mystring指针必须始终指向内存中来自"hello"的"h"所在的位置。

那么之后如果我尝试:

mystring[0] = "y"

mystring = "gooodbye!"

他们不会工作。如果分别去掉第一个或第二个const,则可以使它们正常工作。

const的目的是允许你提前声明"这个变量不能被修改"。这意味着如果它被修改了,那么就有问题了。一般来说,对于实例化后不希望修改的变量,应该始终使用const。

永远不要修改包含常量数组的常量。如果您想更改上面的内容,请创建它的副本并更改副本。正如RasmusKaj所指出的,strcpy在这里没有帮助,因为源字符串包含零字符,所以可能使用memcpy来创建副本。