(char)0和'\0';?在C中

(char)0和'\0';?在C中,c,null-character,C,Null Character,使用(char)0和'\0'来表示字符数组中终止的空字符有什么区别?它们都是0,但是(char)0是char,而'\0'是(非直观的)int。如果值为0,此类型差异通常不会影响程序 我更喜欢'\0',因为这是用于此目的的常量。零在C中可能意味着许多不同的东西。您应该使用空字符'\0',因为这样就不会混淆您的意图是字符串终止 如果将字符设置为0,这可能意味着null终止,但也可能意味着您只是将字符用作8位整数进行计算,而不是作为字符串的一部分。 如果您还在同一代码中使用指针并将其与零进行比较,这可

使用
(char)0
'\0'
来表示字符数组中终止的空字符有什么区别?

它们都是0,但是
(char)0
是char,而
'\0'
是(非直观的)int。如果值为0,此类型差异通常不会影响程序


我更喜欢
'\0'
,因为这是用于此目的的常量。

零在C中可能意味着许多不同的东西。您应该使用空字符'\0',因为这样就不会混淆您的意图是字符串终止

如果将字符设置为0,这可能意味着null终止,但也可能意味着您只是将字符用作8位整数进行计算,而不是作为字符串的一部分。
如果您还在同一代码中使用指针并将其与零进行比较,这可能会进一步混淆,这是一个空指针。

字符数组意味着您正在获取字符串,因此我建议您在从用户处读取所有字符后,在字符数组的末尾使用
'\0'
,因为
0
是简单字符,而
'\0'
null
,表示字符串的结尾。

字符串中的反斜杠符号字符文字允许您指定字符的数值,而不是使用字符本身。因此,
'\1'
[*]表示“数值为1的字符,
'\2'
表示“数值为2的字符”,等等。由于C语言的一个怪癖,字符文字实际上具有类型
int
,实际上
int
也用于处理其他上下文中的字符,例如
fgetc
的返回值。因此,
“\1”
表示“数值为1的字符的int数值”,依此类推

由于字符在C中是数值,“数值为1的字符”实际上是
(char)1
,而且
'\1'
中的额外修饰对编译器没有影响-
'\1'
与C中的
1
具有相同的类型和值。因此,在插入没有自身转义码的不可打印字符时,字符串文本比字符文本更需要反斜杠符号

就我个人而言,当我的意思是0时,我更喜欢编写
0
,并让隐式转换完成它们的工作。有些人觉得这很难理解。当与这些人一起工作时,当您指的是一个值为0的字符时,编写
'\0'
是很有帮助的,也就是说,在您希望
0
很快将隐式转换为
char
类型的情况下。类似地,当您指的是空指针常量时,它可以帮助编写
NULL
,当您指的是值为0的double时,它可以帮助编写
0.0
,依此类推

它是否对编译器有任何影响,以及是否需要强制转换,取决于上下文。由于
'\0'
0
具有完全相同的类型和值,因此需要在完全相同的情况下将其强制转换为
char
。因此,<代码> \“0”'>代码>(char)0 在类型上是不同的,对于完全等价的表达式,您可以考虑“代码>(char)”\“0”/代码> VS <代码>(char)0 < /代码>,或<代码> '0’< /COD> VS <代码> 0 < /代码>。code>NULL具有实现定义的类型——有时需要将其转换为指针类型,因为它可能具有整数类型
0.0
具有类型
double
,因此肯定不同于
0
。仍然,
float f=1.0与浮动f=1相同
float f=1.0f
,而
1.0/i
,其中
i
是一个int,通常与
1/i
的值不同

因此,无论是使用
'\0'
还是
0
的任何一般规则都纯粹是为了方便代码的读者,对编译器来说都是一样的。选择您(和您的同事)喜欢的外观,或者定义宏
ASCII\u NUL


[*]或
'\01'
-由于反斜杠引入的是一个八进制数,而不是十进制数,因此有时明智的做法是确保它以0开头,使其更加明显。当然,对0、1、2没有影响。我说“有时”,因为反斜杠后面只能跟3个八进制数字,所以不能写
\0101
而不是
\101
,以提醒读者这是一个八进制值。这一切都很尴尬,并导致了更多的装饰:
\x41
大写字母a,因此,如果您愿意,您可以为0编写
'\x0'

我同意-当您使用铸造时,我认为您至少应该对这个问题有另一种思考。为什么要把苹果和桔子作比较呢?他不该扔。我相信
charc=0
是合法的,它在gcc上使用
-Wextra-pedantic
编译。我只是觉得
'\0'
更好地表达了这个意图。我把截断字符串作为代码的一部分。因此,当在我必须结束它的部分添加空字符时,我弄不清楚哪种表示更好。哎呀,我无意中否决了这一点(手指摸索)。现在修复它已经太迟了,但是如果您进行编辑,我可以删除否决票。
(char)0
“\0”
是相同的值,但是
“\0”
是最常用的,因为这是用于空字符的
char