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

C代码在Visual Studio运行报错-1073740791,请求问题排查

问题分析与修复方案

核心崩溃原因:Windows平台非法操作标准输入流

你的代码在Visual Studio中首次输入即崩溃,错误码-1073740791对应Windows系统错误码0xC0000409(栈缓冲区溢出/非法内存访问),根源出在getInput函数中的这一行:

fseek(stdin,0,SEEK_END); //clears any leftover crap in stdin

Windows系统中,标准输入流(stdin)属于交互式文本流,不支持fseek操作,强行调用会触发未定义行为,直接导致程序崩溃。这也是代码在Linux/macOS环境编译器(包括在线编译器、VS Code使用的GCC)中能正常运行,但在Visual Studio中崩溃的原因——不同平台对标准流的处理规则存在差异。

具体修复方案

1. 替换非法的缓冲区清空方式

删除fseek(stdin,0,SEEK_END),改用跨平台且合法的方式清空输入缓冲区:

// 清空输入缓冲区直到换行符或EOF
int c;
while ((c = getchar()) != '\n' && c != EOF);

将这段代码放在需要清空缓冲区的位置(比如处理错误输入后)。

2. 修正scanf参数错误

scanf("%255s", &inputStorage)写法错误,数组名inputStorage会隐式转换成指针,应改为:

if(scanf("%255s", inputStorage) != 1)

3. 修正字符转义错误

代码中多处将字符串结束符写成'\\0',C语言中正确的转义应为'\0'(单个反斜杠),例如:

// 错误写法
if(checker != '\\0' && checker != '\\n' && checker != EOF)
// 正确写法
if(checker != '\0' && checker != '\n' && checker != EOF)

同时循环条件inputStorage[qer] != '\\0'也要改为inputStorage[qer] != '\0'。

4. 优化输入处理逻辑

  • 初始化未赋值变量:int intCaster = 0;,避免编译器警告;
  • 用atoi替代atof+强制类型转换,更直接处理整数输入:intCaster = atoi(inputStorage);。

修复后的getInput函数示例

int getInput(int row, int column){
    char inputStorage[256];
    int intCaster = 0;

    int i = 1;
    while (i == 1){
        i++;

        printf("Input row %d column %d: ", row, column);

        if(scanf("%255s", inputStorage) != 1){
            printf("Entry Error.\n");
            // 清空缓冲区
            int c;
            while ((c = getchar()) != '\n' && c != EOF);
            i = 1;
            continue;
        }

        int checker = getchar();
        if(checker != '\n' && checker != EOF){
            printf("Entry Error. Too many inputs.\n");
            // 清空缓冲区
            int c;
            while ((c = getchar()) != '\n' && c != EOF);
            i = 1;
            continue;
        }

        int valid = 1;
        for(int qer = 0; inputStorage[qer] != '\0'; qer++){
            if(isdigit(inputStorage[qer]) == 0){
                printf("Entry Error. Junk Data.\n");
                valid = 0;
                break;
            }
        }

        if(valid){
            intCaster = atoi(inputStorage);
            i = 0;
        } else {
            i = 1;
        }
    }

    return intCaster;
}

修改上述问题后,代码可在Visual Studio中正常运行,同时保持在其他编译器中的兼容性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 11:04:53