gpt4 book ai didi

c - 解析 execve() 的命令行

转载 作者:太空宇宙 更新时间:2023-11-04 08:56:53 25 4
gpt4 key购买 nike

我正在编写一个程序,它需要一个命令行然后解析它,以便在输入中打印每个 argv 的字符串数组。

代码给我一个段错误(核心转储)!

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>

char **parse(int position ,char *argv[] ) ;
int main(int argc ,char *argv[])
{

int i=1;
int f=argc;
argc--;
while( i<f)
{
char commands[10];
char **argument=parse(argc,argv);
//parse(i ,argv ,commands ,argument) ;
printf("the argument[ %i ] is :%s \n",i,argument[i]);

argc-- ;
i++;
}
}

char **parse(int position ,char *argv[])
{
// char *commands;
char** arguments;
char *result ;
char buffer [30] ;
int count =0;

arguments = calloc(1, sizeof (char *));

strcpy(buffer,argv[position-1]); //copy the current argv to the buffer

result =strtok(buffer," ");
// strcpy(commands,result);
//result =strtok(buffer," ");
while(result !=NULL )
{

arguments[count] =result ;
++count;
arguments = realloc(arguments, sizeof (char *) * (count + 1));
result=strtok(NULL," ");
}
arguments[count] = NULL; //in order to call the execvp



return arguments;

}

谢谢你的帮助。

最佳答案

您可以使用 argv[][] array 访问每个参数。 argc 为您提供参数数量。这包括程序名称本身。例如:

c:\>test.exe arg1 arg2

这里 argc 将是 3 并且

argv[0]="test.exe";
argv[1]="arg1";
argv[2]="arg2";

或者,如果你想要更多交互式命令行解析,请检查这个 tclap

关于c - 解析 execve() 的命令行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16496857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com