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

Linux下C语言进程编程问题:execlp调用加法程序失败排查

问题分析与解决

你的代码存在两个关键问题,直接导致了执行失败:

1. 语法错误引发的异常

在recouvre程序的参数检查代码中,printf语句里的argv[0]0是明显的语法错误——多写了一个多余的0,正确写法应为argv[0]。这个错误会导致编译失败,或运行时出现未定义行为。

修正后的参数检查代码:

if (argc != 4) {
    printf("usage: %s <nom_du_programme_calcul> <operande_1> <operande_2>\n", argv[0]);
    exit(10);
}

2. execlp的路径查找问题

execlp函数会在PATH环境变量指定的目录中搜索要执行的程序。当你执行./recouvre calcul 2 3时,argv[1]的值是calcul,如果当前工作目录(.)不在你的PATH环境变量中,系统就找不到当前目录下的calcul程序,导致execlp调用失败,进而触发后续的错误提示。

解决这个问题有两种实用方式:

  • 方式一:指定程序的相对/绝对路径
    修改execlp的第一个参数为./calcul(如果两个程序在同一目录),或者直接传入完整绝对路径;也可以在执行命令时显式指定路径:./recouvre ./calcul 2 3。
    修正后的execlp调用示例:

    execlp("./calcul", argv[1], argv[2], argv[3], NULL);
    
  • 方式二:将当前目录加入PATH
    执行程序前先运行export PATH=$PATH:.,把当前目录添加到环境变量中,这样execlp就能找到当前目录下的calcul。

额外建议:在execlp失败后添加perror打印详细错误信息,能更直观定位问题(比如文件不存在、权限不足等):

execlp(argv[1], argv[1], argv[2], argv[3], NULL);
perror("execlp 调用失败");
printf("Recouvrement du code de %s impossible...", argv[1]);
exit(15);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:55:27