我用的是c++builder,以前是用的
String GetValue()
{
String s_value = "123456";
return s_value;
}
也就是用String来传递字符串的,很好用。但是现在想编写dll,发现dll对String不识别,我试着用char*代替:
char* GetValue()
{
String s_value = "123456";
return s_value.c_str();
}
但是调试结果是有时可以返回正确,有时返回异常。问别人说这个方法不安全,我该怎么修改才能将字符串从函数中返回给主程序?
问题很基础,很弱智,希望大家好好回答。谢谢!
1楼,你的那个方法我试了半天没试出来,你是怎么调用的呢?麻烦告诉下,谢谢。
还有我记得可以用参数的方法来输出,不知道怎么搞?好像那种方法比较常用,麻烦给出实现和调用,谢谢!
c++简单的函数输出字符串问题
答案:2 悬赏:0
解决时间 2021-04-28 07:50
- 提问者网友:全員惡人
- 2021-04-27 21:14
最佳答案
- 二级知识专家网友:气场征服一切
- 2021-04-27 22:22
1、类String实现了对字符串的管理,当函数GetValue返回String对象时,实际上一并返回了一个由类String管理的内部字符串,该字符串仅随着String对象的消亡而消亡。
2、类型char *用于声明(定义)字符指针变量,当函数GetValue返回字符指针时,实际上返回了一个字符串的首地址,这个地址在函数内部对象s_value消亡之后成为一个“野指针”。因此,“调试结果是有时可以返回正确,有时返回异常”。
3、有一个简单的方法来实现楼主的要求,仅做参考:
char *GetValue()
{
static char *s_value = "12345";
return s_value;
}
问题补充答复:我是这样一来调用的
#include
void main()
{
char *p = GetValue();
printf("p=%s\n", p);
}
2、类型char *用于声明(定义)字符指针变量,当函数GetValue返回字符指针时,实际上返回了一个字符串的首地址,这个地址在函数内部对象s_value消亡之后成为一个“野指针”。因此,“调试结果是有时可以返回正确,有时返回异常”。
3、有一个简单的方法来实现楼主的要求,仅做参考:
char *GetValue()
{
static char *s_value = "12345";
return s_value;
}
问题补充答复:我是这样一来调用的
#include
void main()
{
char *p = GetValue();
printf("p=%s\n", p);
}
全部回答
- 1楼网友:情窦初殇
- 2021-04-27 23:58
举个形象点的例子:输入12345.
输出.54321
这是一个递归函数,再次调用的时候,对程序而言,旧的reverse函数运行状态已经被保存在堆栈中了,因而局部变量ch不会被覆盖。就好像有六本一样的书,都叫reverse,第一本书上我写1,放到桌上,第二本同样的位置写2,放到第二本书上,此时,第二本上的2并不会覆盖第一本上的1。第三本写3,放到第二本...直至第五本。
第六本写上.
现在开始输出,把六本书一本本拿起,首先,我看到了第六本上的.,拿走第六本,然后看到第五本上的5,拿走,然后是第四本上的4,再拿走...最后拿走第一本拿走时我看到的顺序就是.54321
修改成'\n'会失败的原因是cin>>会自动忽略空白字符(' ','\t','\n'),所以程序永远无法获取'\n‘,这个放书的过程也永远不会结束。建议详细学习一下程序堆栈的原理,就好理解了,这里不好细讲。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |