如何修改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
相关产品推荐
相关产品推荐

