关于返回字符串的一个问题

squarehead 2009-09-21 10:57:56
#include <stdio.h>

char (*f(void))[]
{
char (*str)[] = "hello world";
return str;
}

int main(void)
{
char (*p)[] = f();
printf("%s\n",*p);
return 0;
}


上面这个函数编译以后出现一个警告说char (*str)[] = "hello world";这句初始化指针不匹配,要怎么改?

谢谢各位大虾指点
...全文
74 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
squarehead 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 cphj 的回复:]
如果非要保持(*str)[]这个形式,那么就这么办吧

C/C++ code#include<stdio.h>constint STR_N=13;//如果你是纯C就改成#define吧char (*f(void))[STR_N]//加个STR_N指明数组的长度{staticchar a[]= {'H','e','l','l','o','','w','o','r','l','d','!','\0'};//只能定义成char数组//为了后面能返回它的地址,还得加上static//其实不要'\0'也可以,反正按数组处理char (*str)[STR_N]=&a;//如果非要让str保持为指向数组的指针,就得定义它指向的数组的长度STR_Nreturn str;//如果前面不改成static,这里就会返回被销毁的栈变量的地址}int main(void)
{char (*p)[STR_N]= f();for (int i=0; i<STR_N; i++)//char数组,循环打吧 {
printf("%c",(*p)[i]);
}
printf("\n");return0;
}
[/Quote]

谢谢
cphj 2009-09-21
  • 打赏
  • 举报
回复
如果非要保持(*str)[]这个形式,那么就这么办吧

#include <stdio.h>

const int STR_N = 13; //如果你是纯C就改成#define吧

char (*f(void))[STR_N] //加个STR_N指明数组的长度
{
static char a[] = {'H','e','l','l','o',' ','w','o','r','l','d','!','\0'}; //只能定义成char数组
//为了后面能返回它的地址,还得加上static
//其实不要'\0'也可以,反正按数组处理
char (*str)[STR_N] = &a; //如果非要让str保持为指向数组的指针,就得定义它指向的数组的长度STR_N

return str; //如果前面不改成static,这里就会返回被销毁的栈变量的地址
}

int main(void)
{
char (*p)[STR_N] = f();
for (int i=0; i<STR_N; i++) //char数组,循环打吧
{
printf("%c",(*p)[i]);
}
printf("\n");
return 0;
}
squarehead 2009-09-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 brookmill 的回复:]
是不是这个意思?
C/C++ code#include<stdio.h>char*f(void)
{char*str="hello world";return str;
}int main(void)
{char*p= f();
printf("%s\n",p);return0;
}
[/Quote]

谢谢,我的意思是初始化(*str)[]的值应该是什么?
jinwei1984 2009-09-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chenjie19891104 的回复:]
char *str = "Hello World!";
返回字符串的函数可以定义为:
char * getString(){
  char *str = "Hello World!";
  return str;
}
[/Quote]

他返回类型是 char (*)[];
jinwei1984 2009-09-21
  • 打赏
  • 举报
回复
char (*str)[] = (char (*)[])"hello world";
chenjie19891104 2009-09-21
  • 打赏
  • 举报
回复
char *str = "Hello World!";
返回字符串的函数可以定义为:
char * getString(){
char *str = "Hello World!";
return str;
}
brookmill 2009-09-21
  • 打赏
  • 举报
回复
是不是这个意思?
#include <stdio.h>

char *f(void)
{
char *str = "hello world";
return str;
}

int main(void)
{
char *p = f();
printf("%s\n",p);
return 0;
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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