1

这个 C 代码行有什么问题

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

我在指针方面很差,我在以前的一些论文中看到了这一点。解决不了。

4

2 回答 2

7

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

变量声明行应该是:

char text[200];

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

  1. 最简单的是制作数组static,因为只要程序运行,它就会一直存在。
  2. 您也可以使用 切换到动态(堆)内存malloc(),但这会将所有权转移给调用者,并且需要调用,free()否则如果此函数被大量调用,内存将泄漏。

此外,作为一个小问题,它的名称位于保留的名称空间中(用户程序不能定义名称以 开头的函数str)。此外,一个不带参数的函数应该像(void)在 C 中那样声明,一对空括号并不意味着同样的事情。

于 2013-10-28T10:47:52.743 回答
2

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

简而言之,如果您想使用指针处理字符串,您可以使用以下方法:

char *str="HELLO WORLD";

如果要使用 char 数组处理字符串,则必须删除地址 operator(*) 处的值

这里是:

char text[20];

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

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

static char text[20];

return text;
于 2013-10-28T10:59:28.363 回答