据我所知,C中字符串的定义是字符串必须在末尾有NUL字符。我也知道以下语句创建了一个字符串的NUL字符:
str[4] = 0;
str[4] = '\0';
但是,当您使用此声明时
str[4] = NULL;
我收到此消息:
string1.c:15:12: warning: assignment makes integer from pointer
without a cast [enabled by default]
我对NULL的理解是它是一个定义为((void *)0)的宏。现在为什么这个分配导致了这个警告信息?这条警告信息到底意味着什么?有人可以翻译此消息,以便更容易理解吗?
答案 0 :(得分:2)
NULL
和NUL \0
是非常不同的东西。 NULL是一个实现定义的宏,定义为0
,(char*)0
或(void*)0
,如果您的实现使用(void*)0
或(char*)0
,那么要将它分配给char
,它将被隐式转换为整数(char
s只是1字节整数)。另一方面,NUL \0
字符是字节大小为0.