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

C语言Null错误求助:输入内容丢失无法赋值与打印

帮你解决C语言输入内容丢失、输出(null)的问题

嘿,别慌!作为C语言新手遇到这种内存相关的问题真的太常见了,我来帮你拆解下最可能的原因和解决办法~

最可能的问题:野指针导致内存访问错误

你输出(null)(null)(null),大概率是因为你用了没有指向有效内存的指针(也就是「野指针」)来接收输入。比如你可能写了类似这样的代码:

#include <stdio.h>

int main() {
    char *str1, *str2, *str3; // 只声明了指针,但没给它们分配内存
    scanf("%s %s %s", str1, str2, str3);
    printf("%s%s%s\n", str1, str2, str3); // 输出全是(null)
    return 0;
}

这段代码里的str1、str2、str3只是指针变量,默认指向内存里的随机地址,你用scanf往这些地址写数据,要么数据直接丢到了无效内存里,要么触发了内存访问错误,最终打印时就显示(null)。

两种简单有效的解决办法

办法1:用固定大小的字符数组(新手首选)

直接声明足够大的字符数组,数组本身会在栈上分配好内存,不用操心指针指向的问题:

#include <stdio.h>

int main() {
    // 声明三个能存100个字符的数组(包含结束符'\0')
    char str1[100], str2[100], str3[100];
    scanf("%s %s %s", str1, str2, str3);
    printf("%s%s%s\n", str1, str2, str3); // 正常输出输入内容
    return 0;
}

办法2:用malloc动态分配内存

如果需要灵活的内存大小,可以用malloc给指针分配堆内存,记得用完要释放:

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

int main() {
    // 给每个指针分配100字节的内存
    char *str1 = malloc(100);
    char *str2 = malloc(100);
    char *str3 = malloc(100);

    // 一定要检查内存是否分配成功!避免空指针错误
    if (str1 == NULL || str2 == NULL || str3 == NULL) {
        printf("内存分配失败啦!\n");
        return 1;
    }

    scanf("%s %s %s", str1, str2, str3);
    printf("%s%s%s\n", str1, str2, str3);

    // 用完内存记得释放,避免内存泄漏
    free(str1);
    free(str2);
    free(str3);
    return 0;
}

额外提醒

  • 如果你的输入包含空格,scanf("%s")会在空格处截断输入,这时候可以用fgets来读取整行内容,比如fgets(str1, sizeof(str1), stdin),不过要注意处理末尾的换行符。
  • 永远不要让指针悬空!使用指针前,一定要确保它指向了一块你有权限访问的有效内存。

内容的提问来源于stack exchange,提问作者A. Mellina

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:45:22