用定界符分割argv数组中的参数

问题描述 投票:0回答:2

我正在尝试使用定界符分割argv中的参数。我想稍后使用execvp来执行带有此参数的程序。

我现在写了一些测试代码,只应打印自变量,但只有一个测试代码被打印。

void splitArguments(char * argv[]){
  char arguments[20];
  char * ptr;
  ptr = strtok( *argv, ";");
  while(ptr != NULL){
    printf("%s\n", ptr );
    ptr=strtok(NULL, ";");
  }
  printf("DONE");
}

我的输入是:./forkexec \;你好 \;世界你好

作为输出,我只得到./forkexec

c argv
2个回答
3
投票

每个参数作为argv的单独元素提供。

argc    = 7
argv[0] = "./forkexec"
argv[1] = ";"
argv[2] = "hello"
argv[3] = ";"
argv[4] = "world"
argv[5] = ";"
argv[6] = "hello"
argv[7] = 0

您在;指向的字符串中寻找argv[0],但其中不包含任何字符。


1
投票

您不需要进行拆分,系统已经为您完成了拆分:

查看此:

#include <stdio.h>

int main(int argc, char *argv[])
{
  for (int i = 0; i < argc; i++)
    printf("argv[%d] = %s\n", i, argv[i]);
}

如果运行此:

.. a.out arg1 arg2 arg3

输出将是这样的:

argv [0] = ./a.outargv [1] = arg1argv [2] = arg2argv [3] = arg3

© www.soinside.com 2019 - 2024. All rights reserved.