';vs";使用chars时,在C中

';vs";使用chars时,在C中,c,C,所以我最近一直在尝试这样使用strcat,但我总是遇到一个错误: strcat(string, 'a'); 然后我意识到我必须使用包含“\0”的东西作为第二个参数,才能得到常量char* 好吧,我只是在VS中玩,然后像这样使用strcat: strcat(string, "a"); 没有出现错误 这对我来说很奇怪,因为几天前我知道我需要创建一个辅助字符,如下所示: aux[0] = 'a'; aux[1] = '\0'; strcat(string, aux); 如果我只想在字符串中添加一

所以我最近一直在尝试这样使用strcat,但我总是遇到一个错误:

strcat(string, 'a');
然后我意识到我必须使用包含“\0”的东西作为第二个参数,才能得到常量char*

好吧,我只是在VS中玩,然后像这样使用strcat:

strcat(string, "a");
没有出现错误

这对我来说很奇怪,因为几天前我知道我需要创建一个辅助字符,如下所示:

aux[0] = 'a';
aux[1] = '\0';
strcat(string, aux);
如果我只想在字符串中添加一个字符

老实说,现在我有点不知所措了

有人能解释一下使用字符时“和”的区别吗


谢谢。

字符串文字隐式以null结尾。这些是等价的声明:

const char a[] = "a";
const char a[] = { 'a', '\0' };
(单引号)用于创建与整数几乎相同的单个字符

另一方面,
(双引号)用于创建一个常量字符指针,这意味着一个以null结尾并包含字符的内存块

您可以在双引号中输入任意数量的字符,但
将始终包含一个字符


此外,您无法比较双引号字符串是否相等,因为在一天结束时,它创建的是一个指针,它是字符串的起点,在大多数计算机上是32或64位整数。另一方面,比较字符(单引号)也可以,因为它们本身就是值,而不是地址指针。

单引号表示单个字符。以null结尾的字符串的双引号。在C语言中,单个字符通常隐式转换为
int
值,以空结尾的字符串实际上是字符数组(包括终止符)。文字字符串(使用双引号,例如
“A”
)是一个不可修改(只读)字符数组。@Someprogrammerdude感谢您的回答。谢谢。这个例子让我更加理解。非常感谢你的深入回答。现在我明白了。
char
是一个整数,与1几乎不一样,对吗?@FiddlingBits实际上char是一个字节,在大多数机器上是8位,int可能是64位或32位。我只是不想在初学者的问题中谈论字节之类的东西而引起更多的混淆