我正在尝试使用定界符分割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
每个参数作为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]
,但其中不包含任何字符。
您不需要进行拆分,系统已经为您完成了拆分:
查看此:
#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