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