中易网

c++简单的函数输出字符串问题

答案:2  悬赏:0  
解决时间 2021-04-28 07:50
我用的是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楼,你的那个方法我试了半天没试出来,你是怎么调用的呢?麻烦告诉下,谢谢。
还有我记得可以用参数的方法来输出,不知道怎么搞?好像那种方法比较常用,麻烦给出实现和调用,谢谢!
最佳答案
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);
}
全部回答
举个形象点的例子:输入12345. 输出.54321 这是一个递归函数,再次调用的时候,对程序而言,旧的reverse函数运行状态已经被保存在堆栈中了,因而局部变量ch不会被覆盖。就好像有六本一样的书,都叫reverse,第一本书上我写1,放到桌上,第二本同样的位置写2,放到第二本书上,此时,第二本上的2并不会覆盖第一本上的1。第三本写3,放到第二本...直至第五本。 第六本写上. 现在开始输出,把六本书一本本拿起,首先,我看到了第六本上的.,拿走第六本,然后看到第五本上的5,拿走,然后是第四本上的4,再拿走...最后拿走第一本拿走时我看到的顺序就是.54321 修改成'\n'会失败的原因是cin>>会自动忽略空白字符(' ','\t','\n'),所以程序永远无法获取'\n‘,这个放书的过程也永远不会结束。建议详细学习一下程序堆栈的原理,就好理解了,这里不好细讲。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
问道人物怎么变色呢?
请问在哲学中deductively valid和inductively
夏普6010,这个机子好吗?
thinkpad电脑计算机 网络 图标不见了 然后点
哈尼宝贝进口母婴用品店我想知道这个在什么地
主板价格?
PSP3000系统版本5.03M33可以玩无双大蛇吗
龙泉驿曾家大院
我向他告白,我说喜欢他,他也说喜欢我,可是
高手来帮我看下这脚本代码怎么改
为什么刚下载的寻仙开不出?
莹盈超市钢铁街店这个地址在什么地方,我要处
大明龙权的关键文件修复包在哪下载
男演员中那个人在现实中为人最好?
如果第找对象 亲女朋友的时候是 亲 还是吻呢
推荐资讯
太元路华远西路商业街地址在什么地方,想过去
labview中的labview中的指数窗函数 终值是指
牙齿残根怎么拔除,过程,用不用切牙龈
西部数据wd2500bevs笔记本硬盘厚度多少?标签
QQ上的图标都哪些是可以点亮后不会自动灭的?
SDH系统综合分析论文
深圳南山中油酒店这怎么坐车去东莞长安去?
如何正确使用平面平晶
我把他当成兄弟好朋友,他跟本就没把我当回事
今后移动飞信会取代QQ聊天工具吗
腾讯Web加速器怎么没地方下载了?
魔兽歪歪里那个管理员说的什么呈现(哪2个字
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?