如果我们在int main()中返回字符串怎么办?

时间:2015-03-16 07:16:27

标签: c return-value

我对以下代码有疑问

int main ( )
{
    return "hello" ;
}

在上面的代码中我们必须返回int,但是我们将返回字符串。代码将编译一个警告,即

  

" return从指针生成整数而没有强制转换(默认情况下启用)"

请解释上述情况会发生什么?

4 个答案:

答案 0 :(得分:4)

如果允许从char*int(通过char [6]char*)的隐式转换,则返回的int将具有字符串文字中第一个元素的地址。如果这会溢出int,则会出现未定义的行为。如果没有,可以假设这是一个非零值,操作系统将其解释为失败退出代码 *


*请注意,main允许的返回值范围可以限制为8位,有符号或无符号,因此可以在此处进行第二次溢出。

答案 1 :(得分:2)

  

但我们正在返回字符串

return字符串本质上意味着返回字符串的基地址,这只是一个指针。

根据第6.8.6.4章,C11标准,第3段,

  

如果执行带有表达式的return语句,则表达式的值为   作为函数调用表达式的值返回给调用者。如果表达式有   类型不同于它出现的函数的返回类型,值为   通过赋值给具有函数返回类型的对象进行转换。

也就是说,字符串"hello"的基指针将转换为int,并将返回给操作系统。所以,这里发生指针到整数的转换,产生警告。

但是,值得一提的是,此转换既不是安全也不是可靠。正如评论中 @Lundin 先生所提到的,转换的结果是实现定义的。

注意:通常,非零退出代码表示程序出现故障,因此操作系统可能会将您的程序视为失败。

答案 2 :(得分:0)

"hello"作为int返回时,它将指针地址"hello"作为整数。作为非零整数,将假定程序已退出为失败。

答案 3 :(得分:0)

您将返回字符串数据的内存地址。