You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java背景开发者求C语言字符串数组简单输入方案(附报错代码)

解决C语言字符串数组输入的问题(从Java转C的视角)

嘿,作为有Java背景转C的开发者,我太懂你这种“怎么C里做个简单的字符串输入这么麻烦”的感受了!咱们先拆解你代码里的核心问题,再改成能正常工作的版本。

你的代码里的几个关键错误

  • 内存分配类型完全错误:你写的char *a=(int*)malloc(n * sizeof(int));,这相当于把一块存int的内存强行当成char*用,而你需要的是一个字符串指针数组(也就是char**类型),用来存储每个输入字符串的首地址。
  • 未给单个字符串分配内存:a[i]是未初始化的指针,根本没有指向任何能存储输入字符串的内存空间,scanf_s自然会报错。
  • scanf_s的用法不对:C语言的scanf_s(微软扩展的安全版本)要求对于%s格式符,必须额外传入缓冲区的大小,防止缓冲区溢出。

修正后的完整代码

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

#define MAX_WORD_LENGTH 100  // 定义每个单词的最大长度

int main() {
    int n;
    printf("Please enter number of words \n");
    // 读取单词数量,注意scanf_s的参数
    scanf_s("%d", &n);
    // 清理输入缓冲区的换行符,避免影响后续输入
    getchar();

    // 第一步:分配存储n个字符串指针的数组
    char **a = malloc(n * sizeof(char*));
    if (a == NULL) {  // 必须检查malloc是否成功
        printf("Memory allocation failed!\n");
        return 1;
    }

    for (int i = 0; i < n; i++) {
        printf("Enter word %d \n", i+1);
        // 第二步:给每个字符串分配内存(+1是为了存储字符串结束符'\0')
        a[i] = malloc((MAX_WORD_LENGTH + 1) * sizeof(char));
        if (a[i] == NULL) {
            printf("Memory allocation for word failed!\n");
            // 之前分配的内存要释放,避免内存泄漏
            for (int j = 0; j < i; j++) {
                free(a[j]);
            }
            free(a);
            return 1;
        }
        // 第三步:用scanf_s读取字符串,传入缓冲区大小
        scanf_s("%s", a[i], MAX_WORD_LENGTH + 1);
    }

    // 验证输出结果
    printf("\nYour input words are:\n");
    for (int i = 0; i < n; i++) {
        printf("%s\n", a[i]);
    }

    // 最后:手动释放所有分配的内存(C没有自动垃圾回收!)
    for (int i = 0; i < n; i++) {
        free(a[i]);
    }
    free(a);

    return 0;
}

为什么C里这个操作比Java复杂?

这是因为Java和C的内存模型完全不同:

  • Java里的String[]是自动管理的,每个String对象由JVM负责分配和回收内存,你只需要直接赋值就行。
  • 但C里没有自动垃圾回收,所有内存都要手动申请和释放;而且C里的“字符串”本质是char数组,字符串数组其实是指针数组,你需要先给指针数组分配内存,再给每个指针指向的字符串分配内存,还要时刻注意缓冲区溢出的问题。

额外提示

如果你不想固定单词长度,也可以用getline来读取任意长度的字符串(更灵活,但用法稍复杂),不过上面的代码已经能满足你输入固定长度单词的需求啦。

内容的提问来源于stack exchange,提问作者Devy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:48:46