为了账号安全,请及时绑定邮箱和手机立即绑定

关于char[] 与char*的问题

关于char[] 与char*的问题

C++
RectCircle 2016-01-15 18:37:57
/* 函数的返回类型是char* 我返回的是 char[]类型, 我跟踪调试的时候返回结果还是正常,一输出就乱码 */ #include<iostream> using namespace std; char* test() {  char a[20]= "abc";  return a; } int main() {  char* a;  a = test();  cout << a <<endl;  return 0; }
查看完整描述

1 回答

已采纳
?
MadMarical

TA贡献79条经验 获得超122个赞

你好,你使用了静态初始化方法在栈中开辟了内存空间,但是栈中内存是由系统自动释放的,所以当test函数调用完毕后,a的空间被自动释放。所以你应该在堆中开辟内存空间如例程1或者讲a定义为全局变量如例程2。

例程1

#include <iostream>

using namespace std;

char* test()
{
    char *a = new char[3];
    *a = 'a';
    a++;
    *a = 'b';
    a++;
    *a = 'c';
    
    return a;//此时返回的a为a[2],所以b为c;
}
int main(int argc, const char * argv[])
{
    char* b;
    b = test();
    cout << b <<endl;
    return 0;
}

例程2

#include <iostream>

using namespace std;

char a[20] = "abc";

char* test()
{
    return a;
}
int main(int argc, const char * argv[])
{
    char* b;
    b = test();
    cout << b <<endl;
    return 0;
}

这是我的见解。

查看完整回答
1 反对 回复 2016-01-18
  • 1 回答
  • 0 关注
  • 1320 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信