Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C-返回字符串_C - Fatal编程技术网

C-返回字符串

C-返回字符串,c,C,你们能帮我理解为什么我的函数不允许我返回字符串吗。我已经检查了这个网站上的一些代码,但我似乎无法让它正常工作。对其他问题的回答建议人们将该功能定义为: const char * stringToRetrun(){ /*do some work*/ return string; } 然而,当我尝试使用相同的格式时,我的编译器会抛出一大堆无效的类型错误/警告 我已将我的问题张贴在下面: char * printMenu() { char message[100] = "Select

你们能帮我理解为什么我的函数不允许我返回字符串吗。我已经检查了这个网站上的一些代码,但我似乎无法让它正常工作。对其他问题的回答建议人们将该功能定义为:

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;
}

任何帮助都将不胜感激。谢谢在
printMenu()
函数结束后,
消息的存储不存在(因为它是一个本地数组)。因此,您不能简单地
返回消息
,然后再访问字符串。这是未定义的行为,是不正确的

字符串在C中很难处理。您可以:

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

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

  • 您有一个大小为100的数组,并且连接了100多个字符,实际上会损坏堆栈

  • 想想messageLocal address的作用域不能用于更高级别的作用域。但是字符串文本可以通过如下连接返回
    const char*MenuString(){const char*message=“从下面选择一个选项:\n”“(1)列出服务器上的所有文件\n”“(2)从服务器检索文件\n”“(3)从服务器检索所有文件\n”“(4)关闭连接\n”“输入您的选择:\n;返回消息;}
    第三种方法是使用
    静态字符消息[100],尽管这有其自身的缺点。