C语言怎么设定函数返回值为char*字符串类型?

比如这样一段代码:
char* GetString(char *str)
{
char *x[127];
printf("%s", str);
scanf("%s", &x);
return x;
}
int main()
{
char *p[127];
char *str[127];
scanf("%s", &str);
p = GetString(str);
printf("%s", p);
}

在 return x;
p = GetString(str);
这两行 编译会出现问题 就是不能在CHAR*[127]与char*之间转化的error
但是如果不界定长度的话 scanf赋值的时候就会出错

这个应该怎么解决?

把函数的返回值的类型设置为char类型的指针就可以了。
例如:char* MultMatrix( )
实例:
#include <iostream>
using namespace std;
char* MultMatrix( )
{
char*M = new char[4];
M[0]='a';
M[1]='b';
M[1]='c';
M[3]='d';
M[3]='\0';//给字符串写结尾
cout << M[0] << " " << M[1] << endl;//输出返回前的数组
cout << M[2] << " " << M[3] << endl;
return M;
}
int main()
{

char *M = MultMatrix();
cout << M[0] << " " << M[1] << endl;//输出返回后数组
cout << M[2] << " " << M[3] << endl;
delete[] M;
return 0;
}
运行结果:
a b
c d
a b
c d
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-15
老大,你代码写得有问题,首先你先确定是字符串指针,而不是指针数组
char *p[127];
char *str[127];
这两行都有问题
char* GetString(char *str)
{
char *strp=NULL;//先定义一个字符串指针
char x[127];
printf("%s", str);
scanf("%s", &x);
strp=x;//将指针指向这个新分配的字符串内存地址
return strp;//这样就能返回字符串指针了
}
int main()
{
char *p;//既然你的函数返回的是char*,此处当然要定义为char*
char str[127];
scanf("%s", &str);
p = GetString(str);
printf("%s", p);
}追问

这个代码最后P的值会产生乱码

追答

对不起,有个地方还得改一下
char* GetString(char *str)
{
char *strp=NULL;//先定义一个字符串指针
char x[127];
printf("%s", str);
scanf("%s", x);//此处修改 字符串指针在输入是不需要作为引用
strp=x;//将指针指向这个新分配的字符串内存地址
return strp;//这样就能返回字符串指针了
}

int main()
{
char *p;//既然你的函数返回的是char*,此处当然要定义为char*
char str[127];
scanf("%s", str);//字符串指针在输入是不需要作为引用
p = GetString(str);
printf("%s", p);
}

追问

这个结果还是一样的乱码 没有变化。。。

追答

这就奇怪了阿,你用的什么操作系统,编译器用的什么?
另外你输入的字符串长度是否超过126个字节?
char* GetString(char *str)
{
char *strp=NULL;//先定义一个字符串指针
char x[127]="";//字符串初始化为空
printf("%s\n", str);
scanf("%s", x);//此处修改 字符串指针在输入是不需要作为引用
strp=x;//将指针指向这个新分配的字符串内存地址
return strp;//这样就能返回字符串指针了
}
int main()
{
char *p;//既然你的函数返回的是char*,此处当然要定义为char*
char str[127]="";//字符串初始化为空
scanf("%s", str);//字符串指针在输入是不需要作为引用
p = GetString(str);
printf("%s", p);
}

追问

vc2008 WIN7的系统 这个应该没有太大问题的啊

追答

又重新修改了一下,这下肯定没问题了
char* GetString(char *str)
{
char *strp=new char[127];//先定义一个字符串指针,[将分配的内存放入堆中]
printf("%s\n", str);
scanf("%s", strp);//此处修改 字符串指针在输入是不需要作为引用
return strp;//这样就能返回字符串指针了
}

main()
{
char *p;//既然你的函数返回的是char*,此处当然要定义为char*
char str[127]="";//字符串初始化为空
scanf("%s", str);//字符串指针在输入是不需要作为引用
p = GetString(str);
printf("%s", p);
}

本回答被提问者采纳
第2个回答  2011-03-23
char *x[127];
修改为 char x[127];

char *p[127];
char *str[127];
修改为
char p[127];
char str[127];追问

p = GetString(str);
这一行仍然会报错
无法从“char *”转换为“char [127]‘

追答

GetString(char *str) 修改为 GetString(char str[])

相似回答