2017-05-22 64 views
-3

我想从另一个函数返回一个字符串的值,并将其作为变量存储。这是我写的,但我无法解决这个问题。为什么我无法存储函数的返回值?

#include "stdio.h" 

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

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

'result = menuFunction();'......编译器没有告诉你任何东西? –

+0

请参阅:http://stackoverflow.com/questions/8440816/warning-implicit-declaration-of-function 您需要切换声明的顺序 –

+1

使用'#include '。注意[main()应该在C和C++中返回什么?](http://stackoverflow.com/questions/204476/)。 –

回答

2

在代码中,result是阵列类型,这是不修改的左值,因此不能被用作赋值运算符的LHS。

引用C11,章§6.5.16

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

和章§6.3.2.1,(重点煤矿

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

解决方案:定义result作为指针来代替。

这就是说,

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