Int 附加到字符,行为不符合我的预期
Int append to char, does not behave as I expect
我在为字符分配 int 时遇到了这个问题。 我有一个常量字符*数据,它就像存储不同对象的大小一样。 我使用它来验证数据是否与对象具有相同的大小,如果是这样,那么我将一个2整数附加到数据中。 问题是,我期望当我将 2 附加到数据时,在 ASCII 表中移动2个位置,但是数据如何表现为字符串,我无法理解这种添加是如何工作的。
示例:我有一个存储字符 ''' 的const char* 数据,并且值为 96,如果我执行以下操作:
data += 2;
我希望结果是b,但<值为 60。
我使用函数sys_log来显示发生的事情。
函数启动:
void Boot(const char* data){
[...]
/*
* OBJECT PROTO
*/
sys_log(0, "BOOT: OBJ PROTO data string: data = %s", data);
sys_log(0, "BOOT: OBJ PROTO size of data: %d", decode_2bytes(data));
if (decode_2bytes(data) != sizeof(TObjectProto))
{
sys_err("object proto table size error");
thecore_shutdown();
return;
}
sys_log(0, "BOOT: OBJ PROTO data after decode_2bytes(data): data = %s", data);
data += 2;
sys_log(0, "BOOT: OBJ PROTO data str + 2: data = %s", data);
size = decode_2bytes(data);
sys_log(0, "BOOT: OBJ PROTO data to size: size = %d", size);
data += 2;
sys_log(0, "BOOT: OBJ PROTO data str + 2: data = %s", data);
sys_log(0, "BOOT: OBJ PROTO data to size: size = %d", decode_2bytes(data));
CManager::instance().LoadObjectProto((TObjectProto *) data, size);
sys_log(0, "To data assign %d * %d", size, sizeof(TObject));
data += size * sizeof(TObjectProto);
sys_log(0, "BOOT: OBJ PROTO data str: data = %s", data);
[...]
decode_2bytes():
inline WORD decode_2bytes(const BYTE *a)
{
return (*((WORD *) a));
}
sys_log :
Apr 12 09:05:54.205886 :: BOOT: OBJ PROTO data string: data = `
Apr 12 09:05:54.205914 :: BOOT: OBJ PROTO size of data: 96
Apr 12 09:05:54.205924 :: BOOT: OBJ PROTO data after decode_2bytes(data): data = `
Apr 12 09:05:54.205933 :: BOOT: OBJ PROTO data str + 2: data = <
Apr 12 09:05:54.205948 :: BOOT: OBJ PROTO data to size: size = 60
Apr 12 09:05:54.205961 :: BOOT: OBJ PROTO data str + 2: data = ½6
Apr 12 09:05:54.205970 :: BOOT: OBJ PROTO data to size: size = 14013
Apr 12 09:05:54.209238 :: To data assign 60 * 40
Apr 12 09:05:54.209247 :: BOOT: OBJ PROTO data str: data = (
正如在sys_log中看到的,我显示了包含数据的内容、值以及加 2 时获得的结果。
data += 2;
我希望结果是 b,但值为 60<。
您只需将指针递增 2,因此它将指向字符串的第 3 个字符,即<
。如果字符串碰巧在此之前结束,它甚至可能是一些随机值。
若要递增指针指向的值,必须取消引用指针:
*data += 2;
但这会触发编译器错误,因为data
被声明为const char*
.
如果要修改字符串,请将参数更改为char* data
。
相关文章:
- CMake:在其他目录中找不到我的头文件
- 为什么 rand 不在我的代码中生成随机数?
- 为什么 emscripten 不编译我的函数?
- C++:处理错误,看不懂我的错误
- 为什么当我做复制和交换习语时不调用我的复制构造函数?
- 为什么我的比较运算符不比较我的点长和双精度值?
- 为什么在这种情况下不调用我的虚拟函数实现?
- handleMessage看不到我的类和函数
- 为什么这一行不输出我的文本文件?
- 我不明白我的编译器是如何获得此输出的
- 为什么在qt c++中找不到我的插槽?
- 为什么我的程序说长度函数不在我的标准库中?
- 我不明白我的错误需要返回一个指针数组
- 我在 c++ 中的 AES 代码有问题。明文正在更改,但加密邮件是相同的。我找不到我的错误
- 为什么找不到我的着色器属性?
- 为什么我的类函数不使用我的全局变量?
- 为什么Visual Studio 2019不编译我的代码?
- 为什么Visual Studio Compiler不在我的Mersenne-Twister实现中循环展开?
- Int 附加到字符,行为不符合我的预期
- 输出不符合我的预期结果,如何解决