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

如何修改C程序利用stat()获取自身文件大小(st_size)

解决方法:修复代码以获取自身文件大小

你的代码有几个关键问题需要调整,我来一步步帮你修正:

1. 修正main函数的参数签名

C标准中main函数的正确参数形式是int main(int argc, char *argv[]),其中argv[0]就是当前程序的路径(可执行文件的名称/路径),这正是你需要传入stat()的参数。你原来的参数写法不符合标准,会导致程序无法正确获取自身路径。

2. 调整错误处理逻辑

当stat()调用失败时(返回非0),你应该打印错误信息方便排查问题,而不是直接返回0。可以用perror()来输出系统错误描述。

3. 正确输出文件大小,而非返回它

st_size是off_t类型(通常是64位整数),直接作为main的返回值会被截断(因为main返回的是int,一般是32位),而且操作系统会把这个返回值当作程序的退出码,不是用来输出结果的。所以应该用printf()把文件大小打印到控制台。


修改后的完整代码

#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    struct stat fileStat;
    // 使用argv[0]获取当前程序的路径
    int err = stat(argv[0], &fileStat);
    
    if (err != 0) {
        perror("stat failed");
        return EXIT_FAILURE;
    }
    
    // 打印文件大小,%lld对应off_t类型(如果是64位系统),或者用%zd根据编译器调整
    printf("当前程序的文件大小:%lld 字节\n", (long long)fileStat.st_size);
    
    return EXIT_SUCCESS;
}

代码说明

  • argv[0]:传入当前可执行文件的路径,stat()通过这个路径获取文件元数据
  • perror("stat failed"):当stat调用失败时,会输出具体的错误原因(比如文件找不到、权限不足等)
  • (long long)fileStat.st_size:将off_t类型转换为long long,确保在不同系统上都能正确打印64位的文件大小
  • EXIT_SUCCESS/EXIT_FAILURE:是标准库定义的宏,比直接写0/1更清晰可读

编译运行后,程序就会输出自身的文件大小啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:19:26