2014-10-08 83 views
-1

你们可以帮我理解为什么我的函数不允许我返回一个字符串。我在这个网站上查看了一些代码,我似乎无法使其工作。答复其他的问题都建议人们定义功能: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; 
} 

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

+1

考虑消息 – 109 2014-10-08 22:16:03

+0

本地地址的范围不能用于更高级别的范围。 但是可以通过连接返回字符串文字,如下所示。 (1)列出服务器上的所有文件\ n“ ”(2)从服务器检索文件\ n“ (3)从服务器检索所有文件\ n“ ”(4)关闭连接\ n“ ”输入您的选择:\ n“; 返回消息; ' }' – BLUEPIXY 2014-10-08 22:30:31

回答

4

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

字符串是尴尬的C.处理您可以:

  1. 在调用者的字符串分配空间,并具备的功能将数据复制到该空间。
  2. 有功能配置新空间并返回指针,要求调用者清理分配的空间。
+2

第三种方法是使用'static char message [100];',虽然它有它自己的一套缺点。 – sfstewman 2014-10-08 22:17:33

0

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

  • 您有尺寸100的阵列,并且已串接超过100个字符,实际上破坏堆