下面的代码错哪里啦,大家帮忙看看

jiezi316 2008-06-04 12:39:54

_declspec(dllexport) char* Test()
{
BSTR a = CString("6213fdfsdc").AllocSysString();
return (char*)a;
}

这样为什么只能返回第一个字符啊,我想返回6213fdfsdc啊!
...全文
135 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
sukyin 2008-06-04
  • 打赏
  • 举报
回复
那你就传一个变量进去。表示a的长度:
_declspec(dllexport) char* Test(int len_a)
{
char* lpszRet = new char[len_a + 1] ;
memset(lpszRet, 0 , strlen("6213fdfsdc") + 1);
strcpy(lpszRet, "6213fdfsdc");

return lpszRet;
}
jiezi316 2008-06-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 bzero1982 的回复:]
返回的变量已经释放掉了

你可以这样

_declspec(dllexport) char* Test()
{
char* lpszRet = new char[strlen("6213fdfsdc") + 1] ;
memset(lpszRet, 0 , strlen("6213fdfsdc") + 1);
strcpy(lpszRet, "6213fdfsdc");

return lpszRet;
}
[/Quote]

我也觉得是这个原因,但由于实际中我的a的值是个变量(并不是6213fdfsdc),所以定义数组的时候不晓得长度的。
bzero1982 2008-06-04
  • 打赏
  • 举报
回复
返回的变量已经释放掉了

你可以这样

_declspec(dllexport) char* Test()
{
char* lpszRet = new char[strlen("6213fdfsdc") + 1] ;
memset(lpszRet, 0 , strlen("6213fdfsdc") + 1);
strcpy(lpszRet, "6213fdfsdc");

return lpszRet;
}

jiezi316 2008-06-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 baihacker 的回复:]
http://www.cnblogs.com/justin/archive/2005/03/24/125057.aspx
你看看这里.
[/Quote]

_declspec(dllexport) char* Test()
{
BSTR a = CString("-6213fdfsdc").AllocSysString();
_bstr_t b = a;
char* c = b;
return c;
}

改成这样的了,跟踪调试DLL,C是正确的,但引用该DLL的代码
char* d=test();
这个d为乱码,感觉好像没有值一样。
baihacker 2008-06-04
  • 打赏
  • 举报
回复
http://www.cnblogs.com/justin/archive/2005/03/24/125057.aspx
你看看这里.
pengzhixi 2008-06-04
  • 打赏
  • 举报
回复
能返回一个局部变量的指针吗?
悠悠长风 2008-06-04
  • 打赏
  • 举报
回复
怎么会只返回一个呢?
你返回的不是一个字符串指针吗?
你看看a[1]是多少?不应该是0吧。
iu_81 2008-06-04
  • 打赏
  • 举报
回复
你根本没有必要知道它的长度,你把它作为一个参数传进去不就可以了
传引用或传指针
HeReComes 2008-06-04
  • 打赏
  • 举报
回复
搂主没领略上面各位的意思.
K行天下 2008-06-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jiezi316 的回复:]
引用 5 楼 bzero1982 的回复:
返回的变量已经释放掉了

你可以这样

_declspec(dllexport) char* Test()
{
char* lpszRet = new char[strlen("6213fdfsdc") + 1] ;
memset(lpszRet, 0 , strlen("6213fdfsdc") + 1);
strcpy(lpszRet, "6213fdfsdc");

return lpszRet;
}


我也觉得是这个原因,但由于实际中我的a的值是个变量(并不是6213fdfsdc),所以定义数组的时候不晓得长度的。
[/Quote]
sukyin 2008-06-04
  • 打赏
  • 举报
回复
这样写也行。
#include <iostream>
using namespace std;
char ** test()
{
char* a = "abcde";
char ** b = &a;
return b;
}
int main()
{
char** p = test();
printf("%s",*p);
}
jiezi316 2008-06-04
  • 打赏
  • 举报
回复
没有人知道吗?
jiezi316 2008-06-04
  • 打赏
  • 举报
回复
实际上我的a是从另一个函数返回出来的。我也不知道长度啊

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧