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

C代码运行后后续命令被忽略 输入内容后程序异常退出问题排查

问题根因
  • 野指针非法访问:代码中仅声明了char* ptr字符指针,未为其分配任何可写的内存空间,指针指向的地址是随机、未授权的。调用gets()向该地址写入输入内容时,触发内存访问越界,操作系统直接终止进程,因此程序输入后直接崩溃退出,后续代码无法执行。
  • gets()为已废弃的危险函数:该函数不校验输入内容长度,无论缓冲区是否有足够空间都会写入所有输入内容,极易触发缓冲区溢出漏洞,C11标准已正式移除该函数,任何场景都不建议使用。
修复方案

方案1:使用栈上固定大小缓冲区(实现最简单,适合普通场景)

#include <stdio.h>
#define BUF_SIZE 1024 // 可根据实际输入长度需求调整缓冲区大小

int main()
{
    char buf[BUF_SIZE];
    printf("Enter the word: ");
    // 用fgets替代gets,指定缓冲区大小避免溢出
    fgets(buf, BUF_SIZE, stdin);
    printf("The input string is: ");
    puts(buf);
    return 0;
}

方案2:使用动态分配内存的指针(适合需要灵活控制内存生命周期的场景)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUF_SIZE 1024

int main()
{
    // 为指针分配可写内存
    char* ptr = (char*)malloc(BUF_SIZE * sizeof(char));
    if (ptr == NULL) {
        perror("内存分配失败");
        return 1;
    }
    printf("Enter the word: ");
    fgets(ptr, BUF_SIZE, stdin);
    // 可选:去除fgets读取的末尾换行符
    ptr[strcspn(ptr, "\n")] = '\0';
    printf("The input string is: ");
    puts(ptr);
    // 释放动态申请的内存,避免内存泄漏
    free(ptr);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:36:07