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

Linux下C语言读取二进制文件魔数报段错误该如何修复

问题修复方案

段错误的核心诱因是fopen打开文件失败返回空指针,后续直接对空指针执行fseek操作触发非法内存访问。

具体修复点

  • 增加文件打开失败校验,避免空指针操作:需要判断fp == NULL的情况,直接打印错误信息退出程序
  • 修正文件路径:Linux系统下/Documents是根目录下的路径,通常不存在,如果你要访问当前用户家目录下的Documents文件夹,需要补全用户名前缀,例如/home/xxx/Documents/OCP/lab1test/lab1call
  • 补充必要头文件:代码需要引入<stdio.h>和<stdlib.h>,否则编译器会因找不到函数定义产生未定义行为
  • 优化冗余逻辑:读取4字节魔数不需要申请整个文件大小的内存,直接使用栈上的4字节无符号字符数组即可,避免内存泄漏

修正后可运行代码

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

int main() 
{ 
    FILE *fp; 
    // 请把下面的路径替换为你实际的文件绝对路径
    fp = fopen("/home/你的用户名/Documents/OCP/lab1test/lab1call", "rb"); 
    // 新增空指针校验
    if (fp == NULL) {
        perror("文件打开失败");
        return EXIT_FAILURE;
    }
    unsigned char magic_number[4];
    // 直接读取前4字节
    fread(magic_number, sizeof(unsigned char), 4, fp); 
    fclose(fp);

    printf("你的文件魔数为:\n");
    printf("%02hhx %02hhx %02hhx %02hhx\n", magic_number[0], magic_number[1], magic_number[2], magic_number[3]);  
    return EXIT_SUCCESS;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:54:07