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

为何argv[0]输出为./a.out而非a.out?

argv[0] 为何会包含路径前缀?

argv[0] 的值并不是固定的程序文件名,它完全由你启动程序时输入的命令字符串决定:

  • 当你在终端输入 ./a.out 执行程序时,shell 会把这个完整的命令(包括当前目录的 ./ 前缀)传递给程序的 argv[0] 参数,所以输出自然是 ./a.out。
  • 如果你把编译后的 a.out 移动到系统 PATH 包含的目录(比如 /usr/local/bin),之后直接输入 a.out 执行,argv[0] 就会是纯文件名 a.out。
  • 甚至可以给程序创建软链接,比如执行 ln -s a.out myprog,然后运行 ./myprog,此时 argv[0] 的值会变成 ./myprog——这足以说明,argv[0] 本质是调用程序时使用的标识符,和程序本身的实际文件名没有强制绑定。

如果需要在程序中获取不带路径的纯程序名,可以使用标准库的 basename() 函数(需要包含头文件 <libgen.h>),示例代码如下:

#include <stdio.h>
#include <libgen.h>

int main(int argc, char *argv[]) {
    printf("纯程序名:%s\n", basename(argv[0]));
    return 0;
}

不管你用 ./a.out、/home/xxx/a.out 还是软链接执行,这段代码都会输出 a.out。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:06:17