今天写代码,遇到一个const char *返回值的问题,记录一下
问题场景:我写了一个动态库,有个函数声明如下:
virtual const char * RGetAppToken(char *appToken, const char *userAccount, const char *userId) = 0;
函数定义如下:
const char * HttpRequestImpl::RGetAppToken(char * appToken, const char * userAccount, const char * userId) { std::string message; // 省略中间逻辑... message = GetAppToken(); return message.c_str(); }
然后通过控制台程序调用改动态库函数如下:
std::string message; memset(appToken, 0, 256); message = httpRequest->RGetAppToken(appToken, userAccount.c_str(), accountId.c_str()); cout << "message: " << message; cout << "\tappToken: " << appToken << endl;
结果在这里遇到一个奇怪的问题,当函数定义中 std::string message; 这句话只有被放在函数开头,或者直接返回字符串字面量时,调用处才能拿到返回值。
如果该句代码被放在函数中间其他地方,或和其他变量一起定义(std::string str, message),或直接写成 std::string message = GetAppToken(),调用处都拿不到返回值。
学识浅薄,不得其解,哪位前辈如有答案,还请不吝赐教。
原文地址:https://www.cnblogs.com/jixiaohua/p/12275759.html
时间: 2024-11-02 13:13:24