gpt4 book ai didi

c - 带有 c 型类型转换的 GCC 警告

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:23:30 25 4
gpt4 key购买 nike

我试图在新系统上编译旧项目,但在新系统中收到“从指针转换为不同大小的整数”警告。

这是源代码:

void mem_fill(char *myptr, char *mystr, uint32_t sz)
{
uint32_t len = strlen((const char*)mystr);
if (len > sz) len = sz;
memset(myptr, (int)NULL, sz); // <-- Warnning reported here
memcpy(myptr, mystr, len);
}

NULL 的定义如下:

#define NULL    (void *)0

老系统不会报这个错,是RHEL4,gcc version 3.4.4 20050721。新系统为Cent OS 6.5,gcc版本4.4.7 20120313

我尝试将转换类型“int”替换为“long”,然后新系统不会再报告此错误,看起来新系统有 64 位指针。但是,如果我将“int”替换为 long/char/short,所有类型都可以通过旧系统上的构建。

我的问题是,为什么新系统会报告此类型转换警告,而旧系统不会?源代码是一样的,那么在开发环境的某处隐藏了gcc的其他默认设置吗?

这个函数等同于strncpy,这个观点很好。其实我的问题是 - 为什么我的旧系统没有报告这个类型转换警告但新系统有,这是由不同版本的 GCC 引起的吗?

感谢大家的帮助。

最佳答案

(int)NULL 更改为 0。该参数应该是一个字节值来填充内存,第一次编写该代码的人不理解空指针和值为零的字节之间的区别。

关于c - 带有 c 型类型转换的 GCC 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22929412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com