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

简单C程序在MSVS中运行报错,Linux GCC下正常运行求助

问题分析与解决:VS中C程序fgets访问违例错误

错误原因解析

  • 你遇到的0xC0000005是Windows系统的访问违例错误,代表程序试图写入完全不可访问的内存地址(这里是0x0000000000000039,属于系统保留的低地址空间)。
  • 问题根源并非fgets本身,而是代码中printf语句的语法错误:你写的格式字符串直接换行,没有使用标准的\n转义符或续行符,不符合C语言标准语法。
    • GCC默认支持非标准扩展,会自动处理这种换行,因此编译后的代码能正常运行。
    • MSVC(VS的编译器)对语法的处理逻辑不同,虽未在编译时报错,但生成的二进制代码破坏了栈结构或参数传递,最终在fgets执行时触发延迟异常。

_CRT_SECURE_NO_WARNINGS宏的作用

这个宏仅用于禁用MSVC对scanf、fgets等“不安全”CRT函数的编译警告,和你遇到的运行时访问违例没有关联,所以添加它无法解决问题。

解决步骤

  1. 修正printf格式字符串:将直接换行改为标准的\n转义符,符合C标准语法:
    printf("line %d %s\n", line++, string);
    
  2. 验证文件路径(可选):VS运行程序时默认工作目录是项目的Debug/Release文件夹,确保myText.txt在该目录下,或使用绝对路径打开文件。

修正后重新编译运行,即可解决访问违例问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 03:45:08