比如这样一段代码:
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赋值的时候就会出错
这个应该怎么解决?
这个代码最后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);
}
p = GetString(str);
这一行仍然会报错
无法从“char *”转换为“char [127]‘
GetString(char *str) 修改为 GetString(char str[])