gpt4 book ai didi

c++ - 将 const char* 从 std::string 传递到 Lua 堆栈变成 null

转载 作者:行者123 更新时间:2023-11-28 03:42:26 26 4
gpt4 key购买 nike

我有这段代码,我从我的游戏支持的不同类型的设备中收集设备 ID,并将 lua global 设置为具有当前设备的 ID 值。当我获得 iOS 设备的 id 时,我从混合的 C++/Objective-C 类中收到一个 const char* 并将其传递给 Lua 堆栈。一切正常。但是,我从一段负责获取 Android 设备 ID 的代码中收到了 std::string 。当我推送 deviceId.c_str() 时,我在 Lua 中得到 nil 。我已经尝试从负责获取设备 ID 的代码中传递 const char*,但是当它从函数返回时,指针似乎出了点问题 [这就是为什么我决定返回字符串,它以这种方式工作得很好]。

我应该怎么做才能顺利地从 std::string 中传递 const char*?

编辑:我试过使用 strcpy 但它没有用:/仍然有同样的问题。

所以..负责从不同设备收集 deviceId 的代码如下所示:

#include "DeviceInfo.h"
#include "DeviceInfoIOS.h"
#include "DeviceInfoAndroid.h"
#include <string>


USING_NS_CC;

extern "C" {

const char *getDeviceId() {

const char *deviceId;

CCLog("test");

#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
DeviceInfoIOS ios;
deviceId = ios.getIOSDeviceId();
CCLog("iOS platform %s", deviceId);

#endif // CC_PLATFORM_IOS

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

CCLog("Android platform");
std::string tempId = getAndroidDeviceId();
CCLog("Android platform test %s", tempId.c_str());
char y[tempId.size() + 1];
strcpy(y, tempId.c_str());
deviceId = (const char*) y;
CCLog("Android platform %s", deviceId);


#endif // CC_PLATFORM_ANDROID
CCLog("Finished platform check");
return deviceId;
}

}

只是一个小提示:所有日志看起来都不错。设备 ID 顺利通过。

这就是我将设备 ID 传递给 Lua 的方式:

//deviceInfo
CCLog("DeviceInfo load");
const char *deviceId = getDeviceId();
CCLog("DeviceInfo %s", deviceId);
lua_pushstring(d_state, deviceId);
lua_setglobal(d_state, "DEVICE_ID");

同样在这里,日志文件包含设备 ID。

最佳答案

您的 getDeviceId 功能已损坏。 tempIdy 都是堆栈变量。一旦你返回,它们将被摧毁。返回指向堆栈变量的指针总是一个坏主意。

你的函数应该返回一个std::string。如果失败,它应该返回一个 char* 数组,它用 new 分配,并且用户应该用 delete 解除分配。这就是为什么最好只返回 std::string 的原因。或者,您可以将 y delcare 作为 static 局部变量,使用固定大小(而不是基于字符串的大小)。

关于c++ - 将 const char* 从 std::string 传递到 Lua 堆栈变成 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8703560/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com