在DLL中如何返回字符串!高分求教?

camphor 2007-09-30 11:26:01
我在编写一个dll ,中有一个函数!要返回字符串与一个常数值

如 void fun(int *p, char * str)
{
int a = 2;
*p = a;
char bb[256];
strcpy(bb,"234566");
str = bb;
}

程序调用

int aa;
char dd[256];
fun(&aa,dd);
但是只有aa能取得值! dd什么也没有!我想在参数中输出字符串,应该怎样做呢?
...全文
215 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
twilightgod 2007-11-03
  • 打赏
  • 举报
回复
函数是值传递的,传字符指针的话其实是复制了一份指针,所以要传指针的指针
Jarrylogin 2007-11-03
  • 打赏
  • 举报
回复
全部在入参中传入C++的引用
void fun(int &i, char &str)
龙凤呈祥焱 2007-11-03
  • 打赏
  • 举报
回复
7楼的什么时候释放内存啊???

MS的API一般是调用者指定缓存,及缓存大小,然后函数内部将内容复制到调用者指定的缓存中就OK了.有的还会返回实际复制多少字符.
个人认为,5楼的方法最简单,也最实用.
oo_v_oo 2007-11-03
  • 打赏
  • 举报
回复
就这个题目,可以想出很多的方法,但最直接的方法就是使用10楼的方法,建议lz考虑一下12楼的意见
sunlin7 2007-11-02
  • 打赏
  • 举报
回复
嘻嘻, 再顶一个.
jwybobo2007 2007-11-02
  • 打赏
  • 举报
回复
楼上有很多正解啊,其实原因就是因为传入的指针在函数结束后变成了野指针了,直接对其赋值就OK 了,不用再在函数里使用一个数组,把数组的起始地址传给它了.
shanhqk 2007-10-20
  • 打赏
  • 举报
回复
如果是DLL文件,建议最好不要使用字符串,指针之类的东西,还是转化为字符数组。
这样设计的理由:
在不支持指针或者对指针的操作是不安全的,最好使用字符数组,例如:vc编写的dll文件在c#或者其他的语言中使用。

例外,LZ需要对指针由有关好的认识,也就是说,传递的时候,最好传递指针的地址,还有就是指针所指向数据的有效长度。
这样不至于说处理的时候,容易出现越界之类的错误。
xaobao 2007-10-19
  • 打赏
  • 举报
回复
恩,学习一个,思路很多.
dirdirdir3 2007-10-15
  • 打赏
  • 举报
回复
其实就是局部变量不能返回的问题,而不关dll的事
nooning 2007-10-15
  • 打赏
  • 举报
回复
void fun(int *p, char * str)
{
int a = 2;
*p = a;
char bb[256]; //栈变量无法返回,返回值不可预测
strcpy(bb,"234566");
str = bb;
}
改为
void fun(int *p, char * &str)
{
int a = 2;
*p = a;
//char bb[256]; //栈变量无法返回,返回值不可预测
char *bb =(char *) malloc(sizeof("234566")+1)//动态内存返回依然有效,不再需要时需要释放,与new一样
strcpy(bb,"234566");
str = bb;
}
nooning 2007-10-15
  • 打赏
  • 举报
回复
void fun(int *p, char * str)
{
int a = 2;
*p = a;
char bb[256]; //栈变量无法返回,返回值不可预测
strcpy(bb,"234566");
str = bb;
}
改为
void fun(int *p, char * &str)
{
int a = 2;
*p = a;
bb = malloc(sizeof("234566")+1)//动态内存返回依然有效,不再需要时需要释放,与new一样
strcpy(bb,"234566");
str = bb;
}
xufeilencho 2007-10-02
  • 打赏
  • 举报
回复
用指针的指针!

支持7楼的

shanhe972005 2007-09-30
  • 打赏
  • 举报
回复
你并没有把值传出来。
用strcpy(str,bb) 代替 str=bb ;
ouyh12345 2007-09-30
  • 打赏
  • 举报
回复
这和dll无关。
要改变指针的值,请传入指针的地址
Chivalry 2007-09-30
  • 打赏
  • 举报
回复
char bb[256];
strcpy(bb,"234566");
str = bb;

我的理解十,bb和str指向同一块内存区域
这块内存区域就是bb[256]
函数返回后,bb[256]内存被回收
导致str为野指针,内容随机
我认为使用memcpy应该可以解决问题
Chivalry 2007-09-30
  • 打赏
  • 举报
回复
不要使用strcpy(),编译器会做处理
使用memcpy试试看
cuiqimeng 2007-09-30
  • 打赏
  • 举报
回复
str指针地址,在fun函数返回后就无效了。
dyw 2007-09-30
  • 打赏
  • 举报
回复
void fun(int *p, char * str)
{
int a = 2;
*p = a;
char bb[256];
strcpy(bb,"234566");

// str = bb; // 这里错误。返回后,临时变量bb的值已不存在。
strcpy(str, bb); // 这里将字符串拷贝到返回值里
}
masterz 2007-09-30
  • 打赏
  • 举报
回复
应该由caller传入一个buffer,
int func(char* buf, int buf_size)
{


}

camphor 2007-09-30
  • 打赏
  • 举报
回复

void fun(int *p, char** str)
{
int a = 2;
*p = a;
char* bb=new char[256];
strcpy(bb,"234566");
*str = bb;
}

我都想用指针的指针啊!但是调用怎么调用啊!
VC怎么调用, Delphi呢?
加载更多回复(5)

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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