为什么我无法存储函数的返回值?

时间:2017-05-22 05:50:24

标签: c arrays pointers variable-assignment

我试图从另一个函数返回一个字符串的值并将其存储为变量。这是我写的,但我在解决问题时遇到问题。

#include "stdio.h"

void main() 
{
    printf("Hello World\n");
    char result[60];
    result = menuFunction();
}

const char* menuFunction() 
{
    return "Hello Again";
}

1 个答案:

答案 0 :(得分:2)

在您的代码中,result是数组类型,它不是可修改的左值,因此不能用作赋值运算符的LHS。

引用C11,章节§6.5.16

  

赋值运算符的左操作数应具有可修改的左值。

和章节§6.3.2.1,(强调我的

  

左值是一个潜在的表达式(对象类型不是void)   指定一个对象; 64)如果一个左值在评估时没有指定一个对象,   行为未定义。当一个对象被称为具有特定类型时,类型是   由用于指定对象的左值指定。 可修改的左值是一个左值   没有数组类型,没有不完整的类型,没有const限定   类型,如果是结构或联合,则没有任何成员(包括,   递归地,所有包含聚合或联合的成员或元素具有const限定   类型。

解决方案:result定义为指针。

那就是说,

  • 对于托管环境,void main()几乎不被允许。您应该使用int main(void)来符合标准。
  • 在函数定义之前使用函数(调用)或者使用forward declaration也是不允许的。您需要事先定义函数,或者在使用之前先进行相同的前向声明。