这样写可以吗?

248406869 2004-10-15 11:00:10
const string f()
{
char buffer[]="XXXXXXXX";
return buffer;
}
这样写可以吗?
...全文
194 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
freefalcon 2004-10-16
  • 打赏
  • 举报
回复
to: 沧海一粟
好,什么时候有时间我也跟你去java版混

to: UPCC
不好意思啊,我不是故意的,:),我每天都忍不住要上csdn,上了csdn就忍不住想回答问题
ipkdkfyygy 2004-10-15
  • 打赏
  • 举报
回复
我个人认为不对
原因是:因为定义的函数的返回值的类型是字符串常量,而buffer类型又是一个地址值
    会出现类型不匹配的错误。
不知道我说的是否有理,还望各位指正,谢谢!!
umbrella1984 2004-10-15
  • 打赏
  • 举报
回复
会自动转换成返回类型的类型,
爱饮四坛 2004-10-15
  • 打赏
  • 举报
回复
freefalcon是对的,只要不用指针,是可以的.
rtdb 2004-10-15
  • 打赏
  • 举报
回复
我说不好,并没说不对
这样写暗藏了类型转换,
很容易被别人误解,不是么? :)
pacman2000 2004-10-15
  • 打赏
  • 举报
回复
呵呵,心宇讲的对。
kobefly 2004-10-15
  • 打赏
  • 举报
回复
to
freefalcon(心宇—小小菜鸟想高飞)

不好意思
没看到返回类型
对于C++实在不是很了解
呵呵
sharkhuang 2004-10-15
  • 打赏
  • 举报
回复
堆栈的问题
freefalcon 2004-10-15
  • 打赏
  • 举报
回复
to 科比
用string是可以的,因为在构造string时,它会自己分配存储区用来存储字符串
kobefly 2004-10-15
  • 打赏
  • 举报
回复
我就是想返回里面的字符串以后使用。比如说我把int型的数据转换成字符串
const string f(int i)
{
char buffer[100];
sprintf(buffer,"%d",i);
return buffer;
}

你说不好,为什么不好?
-------------------------------------
这个是肯定不行的
因为你存在栈中
出了函数就释放了
参见
http://community.csdn.net/Expert/topic/3407/3407002.xml?temp=.3424036
kobefly 2004-10-15
  • 打赏
  • 举报
回复
i当然不可以,函数一返回,buffer 就释放掉了。

要用new在堆上申请内存并赋值呀
-----------------------------------------
其实不是这样的
这个问题
已经讨论过很多遍了
是静态字符串,存放在全局变量区
楼主的做法是可以的
参见
http://community.csdn.net/Expert/topic/3407/3407002.xml?temp=.3424036
248406869 2004-10-15
  • 打赏
  • 举报
回复
rtdb(东临碣石)
我就是想返回里面的字符串以后使用。比如说我把int型的数据转换成字符串
const string f(int i)
{
char buffer[100];
sprintf(buffer,"%d",i);
return buffer;
}

你说不好,为什么不好?
freefalcon 2004-10-15
  • 打赏
  • 举报
回复
1。
const string f()
{
char buffer[]="XXXXXXXX";
return buffer;
}

可以,因为你返回的是string,它会用buffer构造出一个对象,并且const不需要

2.
const char* f()
{
char buffer[]="XXXXXXXX";
return buffer;
}
不可以,因为buffer是栈上分配的一个临时量,函数退出就释放了

3.
const char* f()
{
char* buffer ="XXXXXXXX";
return buffer;
}
可以,因为字符串"XXXXXXX"位于常量字符串区,在程序运行过程中总有效,但它是只读的,所以必须加上const
Poville 2004-10-15
  • 打赏
  • 举报
回复
i当然不可以,函数一返回,buffer 就释放掉了。

要用new在堆上申请内存并赋值呀
rtdb 2004-10-15
  • 打赏
  • 举报
回复
不好,说说你想要做什么?
248406869 2004-10-15
  • 打赏
  • 举报
回复
我个人感觉没什么问题,听听大家的意见。
Dong 2004-10-15
  • 打赏
  • 举报
回复
因为有freefalcon(心宇)的存在,害得我到现在都没有星星的,记得10.1的时候见不到他,我拿了800分!而且只是几天而已的。
  • 打赏
  • 举报
回复
freefalcon(心宇)还在c++里面混啊,高手啊

我现在跑到java区了,^_^
freezingfire 2004-10-15
  • 打赏
  • 举报
回复
3.
const char* f()
{
char* buffer ="XXXXXXXX";
return buffer;
}
可以,因为字符串"XXXXXXX"位于常量字符串区,在程序运行过程中总有效,但它是只读的,所以必须加上const
------------------------------------------------------------------

话虽如此,这样总是不好的编程习惯,应当养成永远不返回栈上变量内容的习惯。
nwpulipeng 2004-10-15
  • 打赏
  • 举报
回复
呵呵,终于搞清楚了,哈哈
抢分了
加载更多回复(1)

64,639

社区成员

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

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