首页 > 编程笔记 > C语言笔记

C语言字符数组的用法(包括定义、初始化、赋值、输入输出等)

字符数组是C语言中一种常用的数组形式,用于存储一系列字符。在C语言中,可以用字符数组来存储字符串。
 

字符数组的概念可以理解为一个连续的内存空间,用于存储多个字符。每个字符占用一个字节的内存,这些字符按照特定的顺序排列在内存中。在C语言中,字符数组通常以空字符'\0'结尾,这个空字符标志着字符串的结束。
 

字符数组的语法格式与普通数组类似,只是元素类型为 char。定义字符数组的一般语法如下:

char 数组名[数组大小];

这里的数组大小指定了数组可以容纳的字符数量。需要注意的是,如果我们打算将字符数组用作字符串,应该将数组大小设置为至少比实际字符数多 1,以容纳结尾的空字符。

1. 字符数组的定义和使用

字符数组的定义可以采用多种方式:我们可以在定义时不指定大小,让编译器自动计算;也可以明确指定数组大小。以下是几种常见的定义方式:

char str1[] = "Hello";  // 编译器自动计算大小为 6(包括结尾的 '\0')
char str2[10];          // 定义一个可容纳 9 个字符和 1 个 '\0' 的数组
char str3[6] = "Hello"; // 明确指定大小,刚好容纳 "Hello" 和 '\0'

初始化字符数组可以在定义时完成,也可以在定义后进行。以下是几种初始化的方法:

char str1[] = "Hello";           // 使用字符串字面量初始化
char str2[] = {'H', 'e', 'l', 'l', 'o', '\0'}; // 使用字符列表初始化
char str3[10] = "Hello";         // 部分初始化,剩余元素自动初始化为 '\0'
char str4[5] = "Hello";          // 警告:没有空间存储 '\0'

对于已经定义的字符数组,我们不能直接使用赋值运算符进行整体赋值。例如,下面的操作是不允许的:

char str[10];
str = "Hello";  // 错误:数组名是常量指针,不能作为赋值操作的左值

相反,我们需要使用字符串处理函数(如 strcpy)或逐个字符赋值:

#include <string.h>

char str[10];
strcpy(str, "Hello");  // 使用 strcpy 函数赋值

// 或者逐个字符赋值
str[0] = 'H';
str[1] = 'e';
str[2] = 'l';
str[3] = 'l';
str[4] = 'o';
str[5] = '\0';

访问字符数组中的单个字符可以使用数组下标。需要注意的是,C语言的数组下标是从 0 开始的。例如:

char str[] = "Hello";
char first_char = str[0];  // 获取第一个字符 'H'
char last_char = str[4];   // 获取最后一个字符 'o'

2. 字符数组的输入输出

字符数组的输入输出操作可以使用多种方法。对于输出,我们可以使用 printf 函数;对于输入,可以使用 scanf、gets、fgets 或者 s_gets 函数。以下是一些示例:

#include <stdio.h>

char str[100];

// 输出
printf("%s\n", str);  // 输出整个字符串
printf("%c\n", str[0]);  // 输出单个字符

// 输入
scanf("%s", str);  // 读取一个单词(遇到空格停止)
fgets(str, sizeof(str), stdin);  // 读取一整行,包括空格

3. 获取字符数组长度

获取字符数组的长度可以使用 strlen 函数,该函数定义在 string.h 头文件中。strlen 函数返回字符数组中有效字符的数量,不包括结尾的空字符。例如:

#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Hello, world!";
    int length = strlen(str);
    printf("字符串 \"%s\" 的长度是 %d\n", str, length);
    return 0;
}

输出结果:

字符串 "Hello, world!" 的长度是 13

需要注意的是,strlen 函数计算的是有效字符的数量,而不是数组的大小。如果我们想要获取数组的总大小(包括未使用的空间),可以使用 sizeof 运算符:

char str[20] = "Hello";
int array_size = sizeof(str);  // 返回 20,即数组的总大小
int string_length = strlen(str);  // 返回 5,即有效字符的数量


字符数组是C语言中处理文本数据的基础,在使用字符数组时,我们需要特别注意几个常见的陷阱,比如:

相关文章