这个C代码行有什么问题

时间:2013-10-28 10:46:31

标签: c pointers

这个C代码行有什么问题

char *string()
{
   char *text[20];
   strcpy(text,"Hello world");
   return text;
}

我的指针很差,我在之前的一篇论文中看到了这一点。 无法解决。

2 个答案:

答案 0 :(得分:7)

它不编译,因为它将字符指针数组视为单个字符数组。

变量声明行应为:

char text[200];

完成修复后,由于您可能感兴趣的原因它仍然被打破:它返回的局部变量(text字符数组)的地址函数返回时超出范围,从而使地址无效。有两种方法:

  1. 最简单的方法是创建数组static,因为只要程序运行,它就会生效。
  2. 您也可以使用malloc()切换到动态(堆)内存,但是这会将所有权转移给调用者并需要调用free(),否则如果此函数被大量调用,内存将会泄漏。
  3. 此外,作为次要点,其名称位于保留名称空间中(用户程序无法定义名称以str开头的函数)。另外,不带参数的函数应该在C中声明为(void),一对空括号表示同样的事情。

答案 1 :(得分:2)

此代码无法编译,因为您正在尝试创建一个指针数组。

简单来说,如果你想使用指针处理字符串,可以使用以下命令:

char *str="HELLO WORLD";

如果你想使用char数组处理字符串,你必须删除地址运算符(*)的值。

这里是:

char text[20];

然后你可以执行你的功能。

仍然存在错误,因为文本的范围仅在函数内有效,因此如果您想传递地址并保留值使其静止

static char text[20];

return text;