字符串的基本介绍

在 C 中,字符串是由空字符(’\ 0’)终止的字符序列。

我们可以使用字符串文字创建字符串,字符串文字是由双引号括起来的字符序列; 例如,取字符串文字 hello world。字符串文字自动以空值终止。

我们可以使用几种方法创建字符串。例如,我们可以声明一个 char *并将其初始化为指向字符串的第一个字符:

char * string = "hello world";

当如上所述将 char *初始化为字符串常量时,字符串本身通常以只读数据分配; string 是指向数组的第一个元素的指针,它是字符'h'

由于字符串文字是在只读内存中分配的,因此它是不可修改的 1 。任何修改它的尝试都会导致未定义的行为 ,所以最好添加 const 来获得像这样的编译时错误

char const * string = "hello world";

它有类似的效果 2

char const string_arr[] = "hello world";

要创建可修改的字符串,可以使用字符串文字声明一个字符数组并初始化其内容,如下所示:

char modifiable_string[] = "hello world";

这相当于以下内容:

char modifiable_string[] = {'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '\0'};

由于第二个版本使用大括号括起初始值设定项,因此字符串不会自动以空值终止,除非通常将字符数组中的'\0'字符显式包含在最后一个元素中。

1 不可修改意味着字符串文字中的字符无法修改,但请记住指针 string 可以修改(可以指向其他地方或可以递增或递减)。

2 两个字符串在某种意义上都具有类似的效果,即两个字符串的字符都无法修改。应该注意的是 string 是一个指向 char 的指针,它是一个可修改的 l 值, 因此它可以递增或指向某个其他位置,而数组 string_arr 是一个不可修改的 l 值,它不能被修改。