C语言动态指针数组输入字符串数组
在C语言中,动态指针数组用于存储字符串数组时,需要动态分配内存来存储字符串指针,然后为每个字符串动态分配内存,下面是一个完整的示例,展示如何实现动态指针数组来输入和存储字符串数组。

(图片来源网络,侵删)
完整代码示例
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
int n; // 字符串数量
char **strings; // 字符串指针数组
char buffer[100]; // 临时缓冲区,用于读取输入
printf("请输入字符串的数量: ");
scanf("%d", &n);
getchar(); // 消耗换行符
// 分配指针数组内存
strings = (char **)malloc(n * sizeof(char *));
if (strings == NULL) {
printf("内存分配失败\n");
return 1;
}
// 输入字符串
for (int i = 0; i < n; i++) {
printf("请输入第%d个字符串: ", i + 1);
fgets(buffer, sizeof(buffer), stdin);
// 去除换行符
buffer[strcspn(buffer, "\n")] = '\0';
// 为字符串分配内存
strings[i] = (char *)malloc(strlen(buffer) + 1);
if (strings[i] == NULL) {
printf("内存分配失败\n");
// 释放之前分配的内存
for (int j = 0; j < i; j++) {
free(strings[j]);
}
free(strings);
return 1;
}
// 复制字符串
strcpy(strings[i], buffer);
}
// 输出所有字符串
printf("\n您输入的字符串数组:\n");
for (int i = 0; i < n; i++) {
printf("%d: %s\n", i + 1, strings[i]);
}
// 释放内存
for (int i = 0; i < n; i++) {
free(strings[i]);
}
free(strings);
return 0;
}
代码说明
-
动态分配指针数组:
strings = (char **)malloc(n * sizeof(char *));
这里分配了一个可以存储
n个字符指针的数组。 -
输入字符串:
- 使用
fgets读取输入,比scanf更安全 - 去除输入中的换行符
- 为每个字符串动态分配足够的内存
- 使用
-
字符串存储:
(图片来源网络,侵删)strings[i] = (char *)malloc(strlen(buffer) + 1); strcpy(strings[i], buffer);
为每个字符串分配精确大小的内存,并复制输入的内容。
-
内存释放:
for (int i = 0; i < n; i++) { free(strings[i]); } free(strings);必须先释放每个字符串的内存,再释放指针数组本身。
注意事项
- 动态分配的内存必须手动释放,否则会导致内存泄漏
- 在分配内存后应检查是否分配成功
- 使用
fgets比scanf更安全,可以避免缓冲区溢出 - 字符串长度需要加1,以存储字符串结束符
\0
扩展功能
如果需要扩展功能,可以考虑:

(图片来源网络,侵删)
- 添加排序功能(如按字母顺序排序字符串)
- 添加查找功能
- 允许用户动态添加或删除字符串
- 实现更复杂的内存管理策略
