将 0x00 分配给 C 中的数组?
assigning 0x00 to an array in C?
我正在阅读他们有这个的幻灯片:
int current = 0;
buffer[current]=0x00;
其中 buffer 只是一个字符数组 char buffer[300];
如果0x00
是null的表示,我们用NULL替换它buffer[current]=NULL
编译时出现如下错误:
assignment makes integer from pointer without a cast
谁能解释一下 buffer[current]=0x00;
是什么意思?这会检查数组列表的结尾吗?
NULL
是一个扩展为实现定义的空指针常量的宏。
这两个定义都对NULL有效:
#define NULL 0
或
#define NULL ((void *) 0))
如果你的编译器使用了后者:
char buffer[300];
buffer[current]=NULL;
您的程序无效,因为您无法将指针值分配给整数对象。
((void *) 0)
是一个指针类型的值。使用 0
或等效的十六进制值 0x00
将 0
分配给整数对象。
我认为 assignment makes integer from pointer without a cast
是 GCC 中的编译器警告,NULL
几乎是为 0x0 定义的:
#define NULL 0
或
#define NULL (void *)0
所以在后面的情况下,如果您将 NULL 分配给整数而不是指针,您会在 GCC 中收到编译器警告。
我正在阅读他们有这个的幻灯片:
int current = 0;
buffer[current]=0x00;
其中 buffer 只是一个字符数组 char buffer[300];
如果0x00
是null的表示,我们用NULL替换它buffer[current]=NULL
编译时出现如下错误:
assignment makes integer from pointer without a cast
谁能解释一下 buffer[current]=0x00;
是什么意思?这会检查数组列表的结尾吗?
NULL
是一个扩展为实现定义的空指针常量的宏。
这两个定义都对NULL有效:
#define NULL 0
或
#define NULL ((void *) 0))
如果你的编译器使用了后者:
char buffer[300];
buffer[current]=NULL;
您的程序无效,因为您无法将指针值分配给整数对象。
((void *) 0)
是一个指针类型的值。使用 0
或等效的十六进制值 0x00
将 0
分配给整数对象。
我认为 assignment makes integer from pointer without a cast
是 GCC 中的编译器警告,NULL
几乎是为 0x0 定义的:
#define NULL 0
或
#define NULL (void *)0
所以在后面的情况下,如果您将 NULL 分配给整数而不是指针,您会在 GCC 中收到编译器警告。