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

C 对导致警告消息的字符串的NULL赋值,c,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的宏。现在

我知道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的宏。现在,为什么此任务会导致此警告消息?这个警告信息的真正含义是什么?有人能翻译一下这条信息以便更容易理解吗?

NULL
和NUL
\0
是完全不同的东西。NULL是一个实现定义的宏,定义为
0
(char*)0
(void*)0
,如果您的实现使用
(void*)0
(char*)0
,则将其分配给
char
,则会隐式转换为整数(
char
s仅为1字节整数)。NUL
\0
字符另一方面是字节大小0。

NUL是一个字符,在C语言中是一种整数类型。NULL是指针。这有帮助吗?请参阅@zwol-有没有办法在没有收到此警告消息的情况下对字符串使用NULL?@Nguai al-为什么要为字符指定NULL?NULL是指针。如果需要,请参阅对于
\0
字符,直接使用它,而不是使用宏NULL。@n当然有。但是在这里,您试图将
NULL
分配给
str[4]
字符。您可以这样做:
const char*j=“hello”;j=NULL;
。此处的
j
是一个字符串,然后将
NULL
分配给该字符串。但是
NULL
是为特定实现定义的,它是一个具有空指针常量的宏,不应分配给整数。空指针值不能保证所有位的表示或转换值都为零。“NUL”不是标准的格式部分,它只是所有位为零的字符代码的ASCII名称。在C语言中,它不是“不可见字符”(这取决于映射到此位置的字符集和标志符号。事实上,它使数组成为C中的字符串。C中没有字符串类型。NUL是字节大小为零的。它占用字节大小为零。@Nguaial:请提供对该标准的参考,其中它甚至提到了符号/macro/etc
NUL
。它并不意味着“注意,但是像“CR”、“LF”等是ASCII码。在C语言中,空字符有一个非常特殊的含义,它肯定不是“什么都没有”!@nguai-我仍然不明白你想表达什么。@EvilTeach-你不清楚哪一部分?