首先,我包含了C ++,因为C ++只是C的父级,因此我猜这两个答案都适用于此,尽管我在这个问题中询问和关注的语言是C,而不是C ++。
所以我开始阅读C书' Head First C'不久前。在本书(第43/278页)中,它将为您回答一个问题。之间有什么区别吗? 文字字符串和字符数组。
由于我不知道文字字符串是什么,所以我完全抛弃了这一点。我理解一个字符串只是一个字符数组,但是什么使得字符串'文字?如果C实际上没有为字符串提供任何类(如C#或Java等现代语言),为什么它在C中提到字符串。
任何人都可以帮助清理这种混乱吗?我真的很难理解微软对此here的看法,并认为我需要一个我能理解的更简单的解释。
答案 0 :(得分:5)
字符串文字是源代码中未命名的字符串常量。例如。 "abc"
是一个字符串文字。
如果您执行char str[] = "abc";
之类的操作,那么您可以说str
使用文字进行初始化。 str
本身不是文字,因为它不是未命名的。
字符串(或C字符串,而不是)是一个连续的字节序列,以空字节结束。
char数组不一定是C字符串,因为它可能缺少终止空字节。
答案 1 :(得分:4)
什么是文字字符串& C中的char数组?
C有两种文字:字符串文字和复合文字。两者都是未命名的,都可以获得他们的地址。 字符串文字中可包含多个空字符。
在C库中,字符串是包含第一个空字符的字符。所以 string 总是只有一个 null字符,否则它不是字符串。 字符串可以是char
,signed char
,unsigned char
。
// v---v string literal 6 char long
char *s1 = "hello";
char *s2 = "hello\0world";
// ^----------^ string literal 12 char long
char **s3 = &"hello"; // valid
// v------------v compound literal
int *p1 = (int []){2, 4};
int **p2 = &(int []){2, 4}; // vlaid
C指定以下为常量,而不是文字,如123
,'x'
和456.7
。这些常量无法获取其地址。
int *p3 = &7; // not valid
C ++和C在许多方面都有所不同。
char
数组是char
的数组。数组可能包含许多空字符。
char a1[3]; // `a1` is a char array size 3
char a2[3] = "123"; // `a2` is a char array size 3 with 0 null characters
char a3[4] = "456"; // `a3` is a char array size 4
char a4[] = "789"; // `a4` is a char array size 4
char a5[4] = { 0 }; // `a5` is a char array size 4, all null characters
以下t*
不是 char
数组,但指向char
。
char *t1;
char *t2 = "123";
int *t3 = (char){'x'};