C 对导致警告消息的字符串的NULL赋值
我知道C中字符串的定义是字符串的末尾必须有NUL字符。我还知道以下语句创建字符串的NUL字符: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的宏。现在
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/etcNUL
。它并不意味着“注意,但是像“CR”、“LF”等是ASCII码。在C语言中,空字符有一个非常特殊的含义,它肯定不是“什么都没有”!@nguai-我仍然不明白你想表达什么。@EvilTeach-你不清楚哪一部分?