C memset警告

amb*_*ika 3 c warnings

这是我的警告.

warning: passing argument 2 of ‘memset’ makes integer from pointer without a cast
Run Code Online (Sandbox Code Playgroud)

然后我改变如下(使NULL为0)

Before Change : memset(key, NULL, KEY_BYTES);
After Change : memset(key, 0, KEY_BYTES);
Run Code Online (Sandbox Code Playgroud)

警告已删除.

我正在使用linux和gcc编译器,C.

这是正确的行动吗?

Jus*_*ant 13

根据实现,C标准库有时将NULL定义为零整数(这将避免您看到的警告),但有时将NULL定义为零转换为void指针.后一种实现会导致您看到的警告.

要回答您的具体问题,在这种情况下您不应该使用NULL.无论实现如何,NULL都旨在用作空指针,而不是整数零的同义词.如果要用memset零填充内存块,则将零作为第二个参数传递,而不是NULL.

引自http://en.wikipedia.org/wiki/Stdlib.h:

空值

stdlib.h和stddef.h头文件定义宏NULL,它产生一个空指针常量,并表示一个指针值,保证不指向内存中的有效地址.

变种

NULL可以定义为等于int 0,long int zero或零转换为void*指针的常量表达式:

#define NULL 0
#define NULL 0L
#define NULL((void*)0)

虽然空指针常量总是用C表示符号常量0或0表示为void指针,但这种指针的实际位表示是系统特定的,可能包含一位.