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

C语言如何读取argv数组中特定分隔符:之后的命令及参数

实现方案

你原有代码的循环执行结束后,变量i的位置有两种可能:

  • i < argc:此时argv[i]就是分隔符:,i之后的所有元素就是第二个命令的内容
  • i == argc:输入中没有分隔符:,不存在第二个命令

直接按这个位置读取即可,注意exec系列函数要求传入的参数数组必须以NULL结尾,你原有代码也需要补充这个逻辑,否则执行命令时会出现参数异常。
完整的参数读取代码如下:

int i;
char *command1[argc];
char *command2[argc];

// 读取第一个命令的参数
for (i = 0; i < argc; i++) {
    if (strcmp(argv[i], ":") == 0) break;
    command1[i] = argv[i];
}
// 给第一个命令参数数组补NULL结尾,满足exec函数要求
command1[i] = NULL;

int j = 0;
// 存在分隔符时读取第二个命令的参数
if (i < argc) {
    i++; // 跳过分隔符:
    for (; i < argc; i++, j++) {
        command2[j] = argv[i];
    }
}
// 给第二个命令参数数组补NULL结尾
command2[j] = NULL;

后续逻辑参考

  • 若command2[0] == NULL,说明输入没有第二个命令,直接执行第一个命令即可
  • 若command2[0]不为空,可创建管道、fork两个子进程分别执行两个命令,实现管道数据传输

小提示:你目前打算用execlp执行命令的话,因为已经有了完整的参数数组,更建议用execvp,调用方式更简单,执行第一个命令直接写execvp(command1[1], command1 + 1)即可,不需要手动拼接参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:54:02