在c++中修改字符数组的特定部分

Altering specific parts of a char array in c++

本文关键字:定部 数组 字符 c++ 修改      更新时间:2023-10-16

我试图设置一个字符数组,前2个字符等于二进制的698,第3和第4个字符是180以下的动态数字,其余的是预定义的150个字符,然后是eof-是否有一种简单的方法来改变字符数组,因此我可以,例如,这样做:

char arr[155];
arr [0-1] = uint_16(698);
arr[2-3] = uint_16(178);
arr[4-154] = (another message);

我是c++新手,对这些东西没有经验。

c++不提供语言级别的数组切片机制。不过,你可以使用一些机制来实现你想要实现的目标。

你可以笨拙和危险地使用混叠(示例删除)

但是更简单、更清晰的方法是简单地声明一个结构体:

#include <cstdint>
struct Replacement {
    uint16_t first = 698;
    uint16_t second = 178;
    char message[150] = { /*... values ...*/ };
};
int main() {
    Replacement r;
    // use 'r' instead of 'arr'.
}

如果你想确保struct

中没有填充
#pragma pack(push, 1)
struct Replacement {
    uint16_t first = 698;
    uint16_t second = 178;
    char message[150] = { /*... values ...*/ };
};
#pragma pack(pop)

对于698和178,这里有一个技巧。 int *a = (int *)arr; *a = 678; a = (int *)(arr + 2); *a = 178; 它使用溢出来填充字符数组,因此必须考虑赋值顺序。

对于另一个消息,如果您将其保存在另一个字符数组中,请使用strcpy(最好是strncpy)将其复制到(arr + 4)中。或者直接将消息读入(arr + 4)中。