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]代码>,尽管这有其自身的缺点。