【发布时间】: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->playerName; }。而且,顺便说一句。你为什么不在if (yourName[i] != '\0')的else中解救。它也会打印 0 终止符之后的字符(如果不是 0)。 -
@Scheff 我想打印整个数组,我的代码正在完成它的工作。在 Assault Cube 中,玩家名称保存在 char 数组中,大小为 16。如果您的玩家名称是 'asd',它将显示为“...asd..........”,因此循环使用 for() 并使用 if() 检查每个字符只剩下'asd',这就是我想要得到的。