在C中将字符串设置为null
将字符串设置为“\0”与在其他语言中将字符串设置为NULL是否相同? 或将字符串设置为“\0”是否意味着该字符串只是空的在C中将字符串设置为null,c,C,将字符串设置为“\0”与在其他语言中将字符串设置为NULL是否相同? 或将字符串设置为“\0”是否意味着该字符串只是空的 char* str = '\0' 我对空字符串和空字符串使用不同的函数,因此我不想意外地对空字符串调用我的空字符串函数。否,在本例中,您指向的是长度为0的实(非空)字符串。只需执行以下操作即可将其设置为实际空值: char* str = NULL; 您的行char*str='\0'确实将str设置为(相当于)NULL。这是因为C中的'\0'是一个值为0的整数,它是一个有效
char* str = '\0'
我对空字符串和空字符串使用不同的函数,因此我不想意外地对空字符串调用我的空字符串函数。否,在本例中,您指向的是长度为0的实(非空)字符串。只需执行以下操作即可将其设置为实际空值:
char* str = NULL;
您的行
char*str='\0'实际上,code>确实将str设置为(相当于)NULL。这是因为C中的'\0'
是一个值为0的整数,它是一个有效的空指针常量。但是它非常模糊:-)
使str
(指向)空字符串的指针是通过str=”“
(或使用str=“\0”
,这将使str指向两个零字节的数组)
注意:不要将您的声明与第3行中的声明混淆
char *str;
/* ... allocate storage for str here ... */
*str = '\0'; /* Same as *str = 0; */
它的作用完全不同:它将str
指向的字符串的第一个字符设置为零字节,有效地使str
指向空字符串
术语挑剔:字符串不能设置为NULL;C字符串是在某个位置具有NUL字符的字符数组。如果没有NUL字符,它只是一个字符数组,不能传递给需要(指向)字符串的函数。
然而,指针是C中唯一可以为NULL的对象。
不要将NULL宏与NUL字符混淆:-)不,它没有。如果它说“\0”
,那么它会。愚蠢的单引号。好球@CatPlusPlus:根据公认的答案,那将是“两个零字节的数组”。@rvighne-Uh-so?另外,这仍然是一个长度为零的字符串,因为哑C字符串以NUL结尾。@Matteo你确定只有当它在双引号中,并且单引号使其成为字符时才是这样吗?是的,但是你必须区分声明char*str='\0'
和语句*str='\0'代码>。他们做的事情很不一样。@glowcoder:对不起,brainfart。我读的是*str='\0'
,而不是char*str='\0'
。你得到了我的+1:)@Matteo:没什么大不了的;很容易混淆单引号和双引号,我也不得不用鹰眼:-)谢谢投票,我很感激。@Bionix不,那不行,因为s
没有初始化。它指向没有记忆。您需要类似于s=malloc(42);strcpy(s,src)
。最好将*
字符附加到变量名而不是类型名,以避免混淆。考虑<代码> char *p1,p2;<代码>。这定义了一个指向char p1和char p2的指针,但它的读取方式好像p1和p2都是指向char的指针类型。