当将char指针赋值给字符数组时,C -赋值使指针从整数变为非强制类型转换[默认启用]



我试图返回一个指向字符数组的指针。该函数位于另一个文件中。我将这些文件编译在一起,它打印出"hello",但仍然产生一个警告

警告:赋值使指针从整数转换而不强制转换[默认启用]

我尝试将function()的返回值转换为(char *),但最终出现了不同的警告:

警告:从不同大小的整数转换为指针[-Wint-to-pointer-cast]"。

我做错了什么?

文件1

#include <stdio.h>                                                                                        
int main()                                                                                                
{                                                                                                                                                                                                   
   printf("%sn", function());                                                                                   
   return 0;                                                                                               
}
文件2

#include <stdio.h>                                                                                       
char *message = "hello";                                                                                 
char *function()                                                                                         
 {                                                                                                        
  return(message);                                                                                       
 }                                                                                                        

这里的问题是缺少原型。由于历史原因,C允许您在不声明函数的情况下使用函数。但是,所有这些函数都被认为返回int,并且它们的所有参数也被认为是int

因为你的函数返回char*,你需要为它添加一个原型(这是一个好主意,所有的函数都有原型,包括那些确实返回int):

#include <stdio.h>                                                                                        
char *function(); // <<== Add this line
int main()                                                                                                
{                                                                                                                                                                                                   
   printf("%sn", function());                                                                                   
   return 0;                                                                                               
}

最新更新