在C语言中,字符串是一种特殊的字符数组,以空字符’\0’结尾。C语言提供了两种主要的方式来定义字符串:使用字符数组和使用字符指针。让我们深入了解这两种方法,并简单对比它们的区别。
1. 使用字符数组定义字符串
字符数组是定义字符串最直接的方式。我们可以通过声明一个字符数组并为其赋值来创建字符串。这种方法为字符串分配了固定大小的内存空间。
定义字符数组的一般语法如下:
char 数组名[数组大小];
需要注意的是,数组大小应该至少比字符串长度大 1,以容纳结尾的空字符。
以下是使用字符数组定义字符串的几种方式:
// 方式 1:声明并初始化
char str1[] = “Hello, World!”;
// 方式 2:先声明,后赋值
char str2[20];
strcpy(str2, “Hello, World!”);
// 方式 3:逐个字符初始化
char str3[] = {‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘\0’};
// 方式 4:声明指定大小的数组并初始化
char str4[20] = “Hello, World!”;
需要注意的是,当我们使用字符数组定义字符串时,编译器会自动在字符串末尾添加空字符 ‘\0’。例如,在方式 1 中,虽然我们只写了 13 个字符,但实际上数组的大小是 14,因为编译器自动添加了结束符。
在方式 2 中,我们使用 strcpy() 函数来为已声明的字符数组赋值,这是因为 C 语言不允许直接用赋值运算符=给数组赋值。
方式 3 展示了如何逐个字符初始化字符串。在这种情况下,我们需要手动添加结束符 ‘\0’。
方式 4 演示了如何声明一个指定大小的字符数组并初始化。这种方法允许我们为字符串预留额外的空间,以便日后可能的修改操作。
2. 使用字符指针定义字符串
使用字符指针定义字符串是另一种常见的方法,这种方法实际上是创建一个指向字符串字面量的指针。字符串字面量通常存储在程序的只读数据段中,这意味着我们不能直接修改它的内容。
定义字符指针的一般语法如下:
char *指针名 = “字符串内容”;
以下是使用字符指针定义字符串的几种方式:
// 方式 1:声明并初始化
char *str1 = “Hello, World!”;
// 方式 2:先声明,后赋值
char *str2;
str2 = “Hello, World!”;
// 方式 3:使用 const 关键字(推荐)
const char *str3 = “Hello, World!”;
使用字符指针定义字符串时,指针变量存储的是该字符串的起始地址;也就是说,指针指向了字符串。
方式 3 中使用 const 关键字明确表示该字符串是只读的,这是一种良好的编程习惯,可以防止意外修改字符串内容。