C语言动态指针数组如何高效输入字符串数组?

99ANYc3cd6
预计阅读时长 8 分钟
位置: 首页 C语言 正文

C语言动态指针数组输入字符串数组

在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;
}

代码说明

  1. 动态分配指针数组

    strings = (char **)malloc(n * sizeof(char *));

    这里分配了一个可以存储n个字符指针的数组。

  2. 输入字符串

    • 使用fgets读取输入,比scanf更安全
    • 去除输入中的换行符
    • 为每个字符串动态分配足够的内存
  3. 字符串存储

    c语言动态指针数组 输入字符串数组
    (图片来源网络,侵删)
    strings[i] = (char *)malloc(strlen(buffer) + 1);
    strcpy(strings[i], buffer);

    为每个字符串分配精确大小的内存,并复制输入的内容。

  4. 内存释放

    for (int i = 0; i < n; i++) {
        free(strings[i]);
    }
    free(strings);

    必须先释放每个字符串的内存,再释放指针数组本身。

注意事项

  1. 动态分配的内存必须手动释放,否则会导致内存泄漏
  2. 在分配内存后应检查是否分配成功
  3. 使用fgetsscanf更安全,可以避免缓冲区溢出
  4. 字符串长度需要加1,以存储字符串结束符\0

扩展功能

如果需要扩展功能,可以考虑:

c语言动态指针数组 输入字符串数组
(图片来源网络,侵删)
  • 添加排序功能(如按字母顺序排序字符串)
  • 添加查找功能
  • 允许用户动态添加或删除字符串
  • 实现更复杂的内存管理策略
-- 展开阅读全文 --
头像
dede为何无法提取首图作缩略图?
« 上一篇 2025-12-13
谭浩强C语言,为何成为经典教材?
下一篇 » 2025-12-13

相关文章

取消
微信二维码
支付宝二维码

目录[+]