嘿,按照这个Question
我再次陷入困境,是的,我试过通过网络和我的教科书。我知道这可能很快就会发布另一个问题,但我真的很难过这个问题。所以无论如何......
作业的下一部分要求我找到人的年龄,这个年龄位于名字后面的下一个字节。基本上,如果名称是“Bob”,那将是
[L][u][k][e][\0][\0][1][5]
其中具有偶数个字符的所有名称都获得2个空字符以使其均匀,然后接下来的两个字节存储short
整数。目前我已经尝试查看字符串长度,然后在将它放到偏移上之前在长度上添加更多,但它似乎无法正常工作
if (name.length() % 2 != 0) {
offset += (name.length());
age = *((short*)foo+offset);
cout << age << "\n";
} else {
offset += (name.length());
age = *((short*)foo+offset);
cout << age << "\n";
}
答案 0 :(得分:4)
您缺少C和C ++将指针增量乘以指向的对象的大小。所以*((short*)foo+offset)
实际上将offsetof(short)字节的偏移时间添加到foo。
或者你可能理解这一点,但没有意识到演员阵容的优先级高于加法,(短*)foo + offset是((short *)foo)+ offset not(short *)(foo + offset) )。
无论如何你想要的是*(short*)((char*)foo + offset)
。如果foo已经是char *或类似的类型,那么你可以省略转换为char *。