【问题标题】:Accessing char array from a class从类中访问 c​​har 数组
【发布时间】:2020-03-12 09:54:51
【问题描述】:

我正在通过破解一个名为“Assault Cube”的游戏来学习 C++。我使用 ReClass.NET 生成了这个类

class playerObj
{
public:
    char pad_0000[4]; //0x0000
    Vector3 Angles; //0x0004
    float velocityForward; //0x0010
    float velocitySide; //0x0014
    float velocityJump; //0x0018
    char pad_001C[4]; //0x001C
    int32_t N00000011; //0x0020
    char pad_0024[4]; //0x0024
    float N00000013; //0x0028
    float N00000014; //0x002C
    char pad_0030[4]; //0x0030
    Vector3 Position; //0x0034
    float X_mouse_axis; //0x0040
    float Y_mouse_axis; //0x0044
    char pad_0048[56]; //0x0048
    int32_t isMoving; //0x0080
    char pad_0084[116]; //0x0084
    int32_t health; //0x00F8
    char pad_00FC[4]; //0x00FC
    char pad_0104[287]; //0x0104
    int8_t N0000008F; //0x0223
    int8_t N000002AD; //0x0224
    char playerName[16]; //0x0225
    char pad_0235[1775]; //0x0235
}; //Size: 0x0924

然后我创建一个指向 playerObj 的指针

playerObj* localPlayer = (playerObj*)*(uintptr_t*)(0x50F4F4);

我可以像这样访问健康变量

int32_t GetYourHealth() {
    int32_t playerHealth = localPlayer->health;
    return playerHealth;
}

但是,我在访问 playerName 时遇到问题。我试着这样做:

char GetYourName() {
    char* yourName = localPlayer->playerName;
    return *yourName;
}

但它没有显示任何内容。如何访问 playerName 字符数组?
编辑:
我已经完成了,方法如下:

char GetYourName() {
    char* yourName = localPlayer->playerName;
    std::cout << "Your name is : ";
    for (int i = 0; i < sizeof(localPlayer->playerName); i++) {
        if (yourName[i] != '\0') {
            std::cout << yourName[i];
        }
    }
    return *yourName;
}

【问题讨论】:

  • *yourName 等于 *(yourName + 0) 等于 yourName[0]。这是一个字符。
  • 您的函数签名返回char,但您在函数中返回char*
  • 您是否打算只返回第一个字符?那很容易:char GetYourName() { return *localPlayer-&gt;playerName; }。而且,顺便说一句。你为什么不在if (yourName[i] != '\0')else 中解救。它也会打印 0 终止符之后的字符(如果不是 0)。
  • @Scheff 我想打印整个数组,我的代码正在完成它的工作。在 Assault Cube 中,玩家名称保存在 char 数组中,大小为 16。如果您的玩家名称是 'asd',它将显示为“...asd..........”,因此循环使用 for() 并使用 if() 检查每个字符只剩下'asd',这就是我想要得到的。

标签: c++ pointers char


【解决方案1】:

使用重分类生成的类的目的是你不需要编写这些“Getter”函数,你可以像访问任何其他类一样访问成员变量。

这是一个以空字符结尾的字符串,所以您所要做的就是:

std::cout << localPlayer->playerName << std::endl;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 2018-05-01
    • 1970-01-01
    • 2013-12-16
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多