在C中将字符串设置为null

在C中将字符串设置为null,c,C,将字符串设置为“\0”与在其他语言中将字符串设置为NULL是否相同? 或将字符串设置为“\0”是否意味着该字符串只是空的 char* str = '\0' 我对空字符串和空字符串使用不同的函数,因此我不想意外地对空字符串调用我的空字符串函数。否,在本例中,您指向的是长度为0的实(非空)字符串。只需执行以下操作即可将其设置为实际空值: char* str = NULL; 您的行char*str='\0'确实将str设置为(相当于)NULL。这是因为C中的'\0'是一个值为0的整数,它是一个有效

将字符串设置为“\0”与在其他语言中将字符串设置为NULL是否相同? 或将字符串设置为“\0”是否意味着该字符串只是空的

char* str = '\0'

我对空字符串和空字符串使用不同的函数,因此我不想意外地对空字符串调用我的空字符串函数。

否,在本例中,您指向的是长度为0的实(非空)字符串。只需执行以下操作即可将其设置为实际空值:

char* str = NULL;

您的行
char*str='\0'确实将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的指针类型。