C - 返回字符串

时间:2014-10-08 22:13:44

标签: c

你能帮助我理解为什么我的函数不允许我返回一个字符串。我已经查看了这个网站上的一些代码,我似乎无法让它工作。对其他问题的回复表明人们将功能定义为:

const char * stringToRetrun(){ /*do some work*/ return string; }

然而,当我尝试遵循相同的格式时,我的编译器会发出一大堆无效的类型错误/警告。

我在下面发布了我的问题:

char * printMenu()
{   
    char message[100] = "Select an option from below:\n";
    strcat(message, "(1) List all files on server\n");
    strcat(message, "(2) Retrieve file from server\n");
    strcat(message, "(3) Retrieve all files from server\n");
    strcat(message, "(4) Close connection\n");
    strcat(message, "Enter your selection:\n");

    return message;
}

任何帮助将不胜感激。感谢

2 个答案:

答案 0 :(得分:4)

message函数的末尾不存在printMenu()的存储(因为它是本地数组)。所以你不能简单地return message然后能够访问该字符串。这是未定义的行为并且不正确。

在C语言中使用字符串很难处理。您可以:

  1. 在调用者中为字符串分配空间,并让函数将数据复制到该空间中。
  2. 让函数分配新空间并返回指针,要求调用者清理分配的空间。

答案 1 :(得分:0)

这里有两个主要问题: 1.变量消息是本地数组,因此在堆栈上创建。当函数返回时,它返回指向堆栈上已经回滚的地址的指针。

  1. 你有一个大小为100的数组,你连接了超过100个字符,实际上破坏了stacK