警告
本文最后更新于 2023-12-31,文中内容可能已过时。
字符数组是 C 语言中的一种数据类型,用于存储一系列字符。字符数组可以用来表示字符串或任何以 null 终止的字符序列。以下是关于字符数组的详细描述:
字符数组是一个连续的内存块,用于存储字符。它可以通过以下方式定义和声明:
1
|
char myArray[10]; // 定义一个可以存储 10 个字符的字符数组
|
这里的 myArray
是字符数组的名称,char
是元素的数据类型,10
是数组的大小。
字符数组可以在声明时进行初始化,也可以在后续的代码中逐个字符赋值。例如:
1
|
char message[20] = "Hello, world!"; // 初始化字符数组
|
或者:
1
2
3
4
5
|
char name[10];
name[0] = 'J';
name[1] = 'o';
name[2] = 'h';
// ...
|
字符数组常常用来表示字符串。字符串是以 null 终止的字符序列,即以 '\0'
(空字符)作为结束标志。例如:
1
|
char greeting[] = "Hello"; // 自动添加 '\0' 终止符
|
字符数组中的每个字符都有一个对应的索引,从 0 开始。你可以使用索引来访问和修改字符数组中的元素。例如:
1
2
3
|
char word[] = "apple";
char firstLetter = word[0]; // 获取第一个字符 'a'
word[2] = 'r'; // 修改第三个字符为 'r'
|
C 语言提供了一些处理字符数组和字符串的库函数,例如 strlen
(获取字符串长度)、strcpy
(复制字符串)、strcat
(拼接字符串)等。
- 功能:返回给定字符串的字符个数(不包括结尾的 null 终止字符)。
- 示例:
1
2
3
4
5
6
|
#include <string.h>
int main() {
char str[] = "Hello, world!";
int length = strlen(str); // 返回 13
return 0;
}
|
- 功能:将一个字符串复制到另一个字符串。
- 示例:
1
2
3
4
5
6
7
|
#include <string.h>
int main() {
char source[] = "Hello";
char destination[10];
strcpy(destination, source); // 复制 "Hello" 到 destination
return 0;
}
|
- 功能:将一个字符串追加到另一个字符串的末尾。
- 示例:
1
2
3
4
5
6
7
|
#include <string.h>
int main() {
char str1[20] = "Hello, ";
char str2[] = "world!";
strcat(str1, str2); // 将 "world!" 拼接到 str1 后面
return 0;
}
|
- 功能:比较两个字符串的大小。
- 示例:
1
2
3
4
5
6
7
|
#include <string.h>
int main() {
char str1[] = "apple";
char str2[] = "banana";
int result = strcmp(str1, str2); // 返回负值,表示 str1 < str2
return 0;
}
|
- 功能:在一个字符串中查找第一次出现的子字符串。
- 示例:
1
2
3
4
5
6
|
#include <string.h>
int main() {
char text[] = "This is a test.";
char *substring = strstr(text, "is"); // 返回 "is is a test."
return 0;
}
|
- 功能:从文件流中读取一行字符串,包括换行符,并将其存储到指定的字符数组中。
- 语法:char *fgets(char *str, int num, FILE *stream);
- 示例:
1
2
3
4
5
6
7
8
9
10
11
|
#include <stdio.h>
int main() {
char buffer[100];
FILE *file = fopen("input.txt", "r"); // 假设存在 input.txt 文件
if (file != NULL) {
fgets(buffer, sizeof(buffer), file); // 从文件中读取一行到 buffer
printf("Read from file: %s", buffer);
fclose(file);
}
return 0;
}
|
- 功能:将字符串输出到控制台,并自动添加换行符。
- 语法:int puts(const char *str);
- 示例:
1
2
3
4
5
6
|
#include <stdio.h>
int main() {
char message[] = "Hello, world!";
puts(message); // 输出 "Hello, world!" 并换行
return 0;
}
|
- 功能:将字符串写入指定的文件流,不会自动添加换行符。
- 语法:int fputs(const char *str, FILE *stream);
- 示例:
1
2
3
4
5
6
7
8
9
10
|
#include <stdio.h>
int main() {
char text[] = "This is some text.";
FILE *file = fopen("output.txt", "w"); // 创建或覆盖 output.txt 文件
if (file != NULL) {
fputs(text, file); // 将字符串写入文件
fclose(file);
}
return 0;
}
|
- 功能:从标准输入读取格式化数据,并将其存储到指定的变量中。
- 语法:int scanf(const char *format, ...);
- 示例:
1
2
3
4
5
6
7
8
9
|
#include <stdio.h>
int main() {
char name[50];
int age;
printf("Enter your name and age: ");
scanf("%s %d", name, &age); // 读取字符串和整数
printf("Name: %s, Age: %d\n", name, age);
return 0;
}
|
- 字符数组的大小应该足够容纳存储的字符,否则可能会导致内存溢出。
- 字符数组在声明时要留出一个额外的位置来存储终止字符 '\0'
。
- 字符数组可以用于存储 ASCII 字符、特殊字符、数字等各种字符。
总之,字符数组是在 C 语言中用于存储字符序列的一种基本数据结构,通常用于表示字符串和处理文本数据。