0

嘿,所以关注这个问题

我又被卡住了,是的,我尝试过浏览网络和教科书。我知道这么快发布另一个问题可能很糟糕,但我真的很难过这个问题。所以无论如何...

作业的下一部分要求我找到这个人的年龄,这个年龄位于姓名之后的下一个字节上。基本上,如果名字是“鲍勃”,那就是

[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";
    }
4

1 回答 1

4

您错过了 C 和 C++ 将指针增量乘以所指向对象的大小。所以*((short*)foo+offset)实际上将偏移时间 sizeof(short) 字节添加到 foo。

或者您可能理解这一点,但没有意识到强制转换比加法具有更高的优先级,(short*)foo+offset 是 ((short*)foo)+offset 而不是 (short*)(foo+offset)。

反正你想要的是*(short*)((char*)foo + offset)。如果 foo 已经是 char* 或类似的类型,那么您可以省略对 char* 的强制转换。

于 2011-08-06T15:07:33.190 回答