首页
社区
课程
招聘
[讨论]c++函数返回值:返回一个指向数组的指针, 怎么写返回值? 怎么写都报错啊
发表于: 2017-6-29 22:05 4047

[讨论]c++函数返回值:返回一个指向数组的指针, 怎么写返回值? 怎么写都报错啊

2017-6-29 22:05
4047


returnTyep functionName(){

    char cs[16] = {'a','B'};

   return &cs;

}

例子如上, 此时returnType应该填什么?

尝试了以下写法, 都不行:

1. 首先填char, 然后编译器报错:cannot convert from 'char (*__w64 )[16]' to 'char'

2. 然后填char (*__w64 )[16], 编译通不过。 

error C2059: syntax error : ')'

error C2143: syntax error : missing ';' before '{'

error C2447: '{' : missing function header (old-style formal list?)

3. 然后尝试去掉圆括号, char *__w64 [16]还是报2的错误。

4. (*__w64 [16]) 和2一样的错误。

5. char * [16] 和2一样的错误。 

6. char (*) [16] 和2一样的错误。 

7. char * fun1 [16]() 报错

8. char [16]*  报错

9. char [16](*) 报错

10. char (*) fun1 ()[16] 报错

11. char *fun1 ()[16] 报错


有人知道这种返回值怎么写吗?





[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 12848
活跃值: (9142)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
2
c/c++没有返回数组这种说法,请不要把脚本语言的思维带入c++
2017-6-29 22:20
0
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
3

看你这写法,你是前端来的吧。
首先C/C++里不能直接返回一个指向栈的指针。
你要返回一个数组的话,要么malloc一个,要么new,要么返回全局变量,要么调用者传入数组的指针,被调用者对数据进行操作。

给你个实例:

char * getCharArray()
{
  char *lpResult = (char *)malloc(16);
  if (lpResult == NULL) return NULL;
  
  lpResult[0] = 'a';
  lpResult[1] = 'B';
  return lpResult;
}


2017-6-29 22:21
0
雪    币: 10052
活跃值: (3502)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4


typedef char char_array_t[16];
typedef char (*char_array_ptr_t)[16];
char_array_t obj;
char_array_ptr_t p_obj;
char_array_t *fun0 (void)
{
    p_obj = &obj;
    return &obj;
}
char_array_ptr_t fun1 (void)
{
    p_obj = fun0();
    return p_obj;
}

2017-6-29 22:28
0
雪    币: 15
活跃值: (259)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
char  cs[]  为局部变量    你&也只是  lea  ebp取伐首地址    你思想很危险啊    retuentype改  char*            return  &cs改    return  (char*)cs;       
2017-6-29 22:28
0
雪    币: 183
活跃值: (1178)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
typedef  char(*XXX)[16];
XXX  functionName()
{

       char  cs[16]  =  {  'a','B'  };

       return  &cs;
}
2017-6-29 22:29
0
雪    币: 145
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7

正经项目, 尽量不要使用C风格的字符串处理方式, 除非万不得已.

std::string functionName()
{
   char cs[16] = {'a','B','\0'};
   return cs; // 如果是二进制数据, 不是\0结尾的字符串, 要  return string(cs,size)
}

然后这样调用
{
  string ret = functionName();
  cout<<ret;  //或 printf("%s",ret.c_str()) .  //如果是二进制数据, 最好用ret.data()访问
}

2017-6-30 00:34
0
雪    币: 438
活跃值: (228)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
8
可以判断,你应该没有指针的概念。
2017-6-30 00:46
0
雪    币: 9479
活跃值: (757)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
returnTyep和cs有关系吗,C不会帮你做转换的,编译通不过。
2017-6-30 01:47
0
雪    币: 3
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
yy大雄 typedef char(*XXX)[16]; XXX functionName() { char cs[16] = { 'a','B' }; return &cs; }
点赞,  应该是这样的,  明天我试试。
2017-6-30 01:52
0
雪    币: 190
活跃值: (84)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11




yy大雄

typedef char(*XXX)[16];
XXX functionName()
{

char cs[16] = { 'a','B' };

return &cs;
}

这样的话函数返回值仍是指向栈空间地址的指针,函数返回之后那块栈空间数据(虽然可能数据还在)不可控,显然不行。

2017-7-2 21:16
0
雪    币: 190
活跃值: (84)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12

typedef struct _char16
{
    char ch[16];
} char16;
char16 functionName()
{
    char16 cs = { 'a', 'B' };
    return cs;
}


2017-7-2 21:17
0
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13

cpp的语法太灵活了

// c++不支持返回数组, 下句不加&会生成 error C2090: function returns array
// 但支持返回非局部引用, 所以cs应为static或全局变量
static char(&functionName())[16]
{
	static char cs[16] = { 'a', 'B' };
	return cs;
}


2017-7-2 21:59
0
游客
登录 | 注册 方可回帖
返回
//