什么是文字字符串& C中的char数组?

时间:2018-05-01 23:21:14

标签: c

首先,我包含了C ++,因为C ++只是C的父级,因此我猜这两个答案都适用于此,尽管我在这个问题中询问和关注的语言是C,而不是C ++。

所以我开始阅读C书' Head First C'不久前。在本书(第43/278页)中,它将为您回答一个问题。之间有什么区别吗? 文字字符串和字符数组。

由于我不知道文字字符串是什么,所以我完全抛弃了这一点。我理解一个字符串只是一个字符数组,但是什么使得字符串'文字?如果C实际上没有为字符串提供任何类(如C#或Java等现代语言),为什么它在C中提到字符串。

任何人都可以帮助清理这种混乱吗?我真的很难理解微软对此here的看法,并认为我需要一个我能理解的更简单的解释。

2 个答案:

答案 0 :(得分:5)

字符串文字是源代码中未命名的字符串常量。例如。 "abc"是一个字符串文字。

如果您执行char str[] = "abc";之类的操作,那么您可以说str 使用文字进行初始化。 str本身不是文字,因为它不是未命名的

字符串(或C字符串,而不是)是一个连续的字节序列,以空字节结束。

char数组不一定是C字符串,因为它可能缺少终止空字节。

答案 1 :(得分:4)

  

什么是文字字符串& C中的char数组?

C有两种文字字符串文字复合文字。两者都是未命名的,都可以获得他们的地址。 字符串文字中可包含多个空字符

在C库中,字符串是包含第一个空字符的字符。所以 string 总是只有一个 null字符,否则它不是字符串字符串可以是charsigned charunsigned 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'};