对字符串的NULL赋值导致警告消息

时间:2017-04-29 01:19:00

标签: c

据我所知,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)的宏。现在为什么这个分配导致了这个警告信息?这条警告信息到底意味着什么?有人可以翻译此消息,以便更容易理解吗?

1 个答案:

答案 0 :(得分:2)

NULL和NUL \0是非常不同的东西。 NULL是一个实现定义的宏,定义为0(char*)0(void*)0,如果您的实现使用(void*)0(char*)0,那么要将它分配给char,它将被隐式转换为整数(char s只是1字节整数)。另一方面,NUL \0字符是字节大小为0.