C语言 字符串数组
时间: 2025-05-13 16:52:31 浏览: 18
### C语言中字符串数组的使用
在C语言中,字符串数组可以通过多种方式实现和操作。以下是关于如何定义、初始化以及操作字符串数组的具体说明。
#### 1. 使用一维字符数组表示单个字符串
通过`char[]`类型的变量可以存储一个字符串。例如:
```c
#include <stdio.h>
int main() {
char name[5] = "lily";
printf("String: %s\n", name); // 输出 lily
printf("Address of string: %p\n", (void*)name); // 打印字符串首地址
return 0;
}
```
上述代码展示了如何声明并打印一个简单的字符串[^2]。需要注意的是,当字符串长度不足时,编译器会自动填充剩余空间为`\0`以确保字符串结束标志的存在。
---
#### 2. 使用二维字符数组表示多个字符串
对于多字符串的情况,通常采用二维字符数组的形式。下面是一个例子,展示如何定义、初始化以及遍历这样的数组:
```c
#include <stdio.h>
#include <string.h>
#define MAX_ROWS 3
#define MAX_COLS 20
int main() {
char strArray[MAX_ROWS][MAX_COLS] = {"apple", "banana", "cherry"};
for (int i = 0; i < MAX_ROWS; ++i) {
printf("String at index %d: %s\n", i, strArray[i]);
}
// 修改某个字符串的内容
strcpy(strArray[1], "blueberry");
printf("Modified String at index 1: %s\n", strArray[1]);
return 0;
}
```
在这个示例中,`strArray` 是一个二维字符数组,每一行代表一个独立的字符串。注意,在这种情况下,修改字符串不会影响原始的字符串字面量,因为这里保存的是字符串副本[^4]。
---
#### 3. 使用指针数组表示多个字符串
另一种常见的方法是利用指针数组来指向不同的字符串字面量。这种方式更加灵活,但不支持直接修改字符串内容(除非重新分配内存)。
```c
#include <stdio.h>
int main() {
const char* fruits[] = {"orange", "grape", "watermelon"};
int size = sizeof(fruits) / sizeof(fruits[0]);
for (int i = 0; i < size; ++i) {
printf("Fruit at index %d: %s\n", i, fruits[i]);
}
// 尝试修改字符串会导致未定义行为
// fruits[0][0] = 'O'; // 错误!
return 0;
}
```
此代码片段显示了一个由指针组成的数组 `fruits`,其成员分别指向三个固定的字符串字面量。由于这些字符串位于只读区域,因此无法对其进行写入操作[^1]。
---
#### 4. 字符串数组作为函数参数传递
为了将字符串数组传给函数处理,可以根据需求选择合适的方式——既可以传递整个二维数组,也能仅提供指针列表。以下是一则实例演示后者的情形:
```c
#include <stdio.h>
#include <string.h>
// 函数原型:接受整数计数值与对应数量的字符串指针构成的一维数组
void printStrings(int count, const char **strings);
int main() {
const char *colors[] = {"red", "green", "blue"};
int nColors = sizeof(colors)/sizeof(colors[0]);
printStrings(nColors, colors);
return 0;
}
void printStrings(int count, const char **strings){
for(int i=0;i<count;++i){
printf("Color #%d is '%s'\n", i+1, strings[i]);
}
}
```
在这里,我们创建了一种通用机制用于迭代访问任意一组字符串集合,并将其逐一输出到标准控制台流上[^3]。
---
### 总结
以上介绍了几种典型的场景及其对应的解决方案,涵盖了从基础概念到实际应用的不同层面的知识点。希望这能帮助您更好地理解和掌握有关于C语言里头围绕着所谓“字符串数组”的那些事儿。
阅读全文
相关推荐












