我编写了一个函数,它将 2 个字符数组和整数拆分为一个字符串并返回指向新字符数组的指针,但是在编译时我收到此警告:
warning: assignment makes pointer from integer without a cast
mapfile = world_to_char( "maps/", map, ".bin" );
^
这是我的代码,前两行是 gcc 向我发出警告的文件中的行:
char *mapfile;
mapfile = world_to_char( "maps/", map, ".bin" );
和函数(我知道它只适用于 [0;99] 中的数字,但这对我来说已经足够了):
char *world_to_char( char dir[], int number, char ext[] ) {
char id[ 3 ] = { 0, 0, 0 };
if( number > 9 ) {
id[ 1 ] = ( number % 10 ) + '0';
number /= 10;
}
id[ 0 ] = number + '0';
char *map;
map = malloc( MAX_MAP_FILENAME * sizeof( char ) );
strcpy( map, dir );
strcat( map, id );
strcat( map, ext );
return map;
}
为什么我会收到此警告?我返回的是指针而不是整数。
最佳答案
很可能 world_to_char()
在 main()
之后定义,添加一个函数原型(prototype),它应该可以工作。所以之前main()
添加这个
char *world_to_char(char *dir, int number, char *ext);
“java”样式的参数 char dir[]
无论如何都会变成指针,所以让我们通过将它们更改为 char *dir
来清楚地表明这一点。相反。
该错误消息是由于隐式声明造成的,因为编译器在调用该函数时没有看到声明,它假定它返回 int
,因此分配 int
至char *
正在从没有强制转换的整数创建指针。
关于c - 在 C 中,当返回指针时,赋值使指针来自整数而不进行强制转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34686878/