能力值:
( LV9,RANK:280 )
|
-
-
2 楼
c/c++没有返回数组这种说法,请不要把脚本语言的思维带入c++
|
能力值:
( 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;
}
|
能力值:
( 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;
}
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
char cs[] 为局部变量 你&也只是 lea ebp取伐首地址 你思想很危险啊 retuentype改 char* return &cs改 return (char*)cs;
|
能力值:
( LV3,RANK:30 )
|
-
-
6 楼
typedef char(*XXX)[16]; XXX functionName() {
char cs[16] = { 'a','B' };
return &cs; }
|
能力值:
( 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()访问
}
|
能力值:
( LV5,RANK:70 )
|
-
-
8 楼
可以判断,你应该没有指针的概念。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
returnTyep和cs有关系吗,C不会帮你做转换的,编译通不过。
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
yy大雄
typedef char(*XXX)[16];
XXX functionName()
{
char cs[16] = { 'a','B' };
return &cs;
}
点赞, 应该是这样的, 明天我试试。
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
yy大雄 typedef char(*XXX)[16]; XXX functionName() {
char cs[16] = { 'a','B' };
return &cs; }
这样的话函数返回值仍是指向栈空间地址的指针,函数返回之后那块栈空间数据(虽然可能数据还在)不可控,显然不行。
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
typedef struct _char16
{
char ch[16];
} char16;
char16 functionName()
{
char16 cs = { 'a', 'B' };
return cs;
}
|
能力值:
( 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;
}
|
|
|