这个C代码行有什么问题
char *string()
{
char *text[20];
strcpy(text,"Hello world");
return text;
}
我的指针很差,我在之前的一篇论文中看到了这一点。 无法解决。
答案 0 :(得分:7)
它不编译,因为它将字符指针数组视为单个字符数组。
变量声明行应为:
char text[200];
完成修复后,由于您可能感兴趣的原因它仍然被打破:它返回的局部变量(text
字符数组)的地址函数返回时超出范围,从而使地址无效。有两种方法:
static
,因为只要程序运行,它就会生效。malloc()
切换到动态(堆)内存,但是这会将所有权转移给调用者并需要调用free()
,否则如果此函数被大量调用,内存将会泄漏。 此外,作为次要点,其名称位于保留名称空间中(用户程序无法定义名称以str
开头的函数)。另外,不带参数的函数应该在C中声明为(void)
,一对空括号不表示同样的事情。
答案 1 :(得分:2)
此代码无法编译,因为您正在尝试创建一个指针数组。
简单来说,如果你想使用指针处理字符串,可以使用以下命令:
char *str="HELLO WORLD";
如果你想使用char数组处理字符串,你必须删除地址运算符(*)的值。
这里是:
char text[20];
然后你可以执行你的功能。
仍然存在错误,因为文本的范围仅在函数内有效,因此如果您想传递地址并保留值使其静止
static char text[20];
return text;