为C中的数组分配0x00?

时间:2015-02-06 21:59:09

标签: c hex character-arrays

我正在阅读他们有这张照片的幻灯片:

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;的含义吗?这会检查数组列表的结尾吗?

2 个答案:

答案 0 :(得分:3)

NULL是一个宏,它扩展为实现定义的空指针常量。

这两个定义对NULL都有效:

#define NULL  0

#define NULL  ((void *) 0))

如果在编译器中使用后者:

char buffer[300];
buffer[current]=NULL;

您的程序无效,因为您无法将指针值分配给整数对象。

((void *) 0)是指针类型的值。使用0或等效的十六进制值0x000分配给整数对象。

答案 1 :(得分:1)

我认为assignment makes integer from pointer without a cast是GCC中的编译器警告,NULL几乎是为0x0定义的:

#define NULL 0

#define NULL (void *)0

所以在以后的情况下,如果你将NULL分配给整数而不是指针,你会在GCC中得到编译器警告。