c - 在 C 中,当返回指针时,赋值使指针来自整数而不进行强制转换

标签 c pointers gcc warnings

我编写了一个函数,它将 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 ,因此分配 intchar *正在从没有强制转换的整数创建指针。

关于c - 在 C 中,当返回指针时,赋值使指针来自整数而不进行强制转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34686878/

相关文章:

c - 如何测试文件系统的实现?

c - C中两个指针之间的距离

c++ - c++:使用数组,指针和循环来制作直方图。我就在那儿,我可能想得太辛苦了

c++ - GCC 使用 `memory_order_seq_cst` 跨负载重新排序。这是允许的吗?

c - 正交缩放opengl视口(viewport)

c - 反斜杠换行符在#if 和#elif 上有效吗?

c - 使用 calloc 分配二维数组

c++ - Itanium ABI 在多大程度上真正指定了填充和对齐?

c - "sizeof (char[0])"怎么用 GCC 编译得很好

c - 通过scanf()输入多字串