简单吗?的argv []转换为char *
所以,我有我想修改我自己的目的简单吗?的argv []转换为char *
它基本上是运行shell脚本(下面的测试例子),但使用苹果的安全框架PRIVS一个示例应用程序源(见以下链接为原始来源)。
#!/bin/bash
echo [email protected]
whoami
在该示例代码我们通过以下内容:
myFlags = kAuthorizationFlagDefaults; // 8
myStatus = AuthorizationExecuteWithPrivileges // 9
(myAuthorizationRef, myToolPath, myFlags, myArguments,
&myCommunicationsPipe);
我已修改命令添加myToolPath作为第一个参数为这样:
// Grab the arguent length
int size = strlen(argv[1]);
// Grab the first argument
char myToolPath[size];
strcpy(myToolPath,argv[1]);
其中工程,这意味着当我运行时
./compiled_priv_tool /tmp/example.sh
它返回“root”而不是我正在使用的用户。
但现在我希望能够传递参数给这个帮手,并让他们加入到这个数组 这是示例中的示例代码
char *myArguments[] = { "-u", NULL };
所以我以前的shell示例可能会输出什么像这样:
./compiled_priv_tool /tmp/example.sh
-u
root
,但我希望能够动态传递尽可能多的参数作为argv的可以包含到这个脚本后,输出应该是这样的
./compiled_priv_tool /tmp/example.sh -u user -f file path -b lah
-u user -f file path -b lah
root
我不需要处理C代码中的参数,我只是需要将它们直接传递给shell脚本(外部命令)。
因此,继承我的(希望)简单的问题,如果一个人想采取argv []并将它除了参数0(这是路径到./compiled_priv)复制到期望的char * myArguments var那么看什么像在代码中一样。我学习了Objective C,并且从不用C开始,所以这可能很基本,但我尝试了一个for循环并复制这两个索引,但它不起作用。是这样的:
的char * myArguments [] =的argv
就是我想要的,但还是不行,因为它说无效的初始化,并且即使它看起来我们在年底需要一个NULL该阵列非常像NSTask。我会包括我的for循环,但它不是一个启动器。
所以我需要argv的内容从1到数组的末尾,并在末尾添加一个NULL,并在原始示例代码中以与char * myArguments []相同的形式包装它。如果我对c有更好的理解,它会有所帮助,但同时也会有所帮助?
下面是我与它是否有助于播放源链接,
argv
已经在您需要的格式(的char *
指针一个NULL
终止阵列),所以你可以做:
char **myArguments = &argv[2];
(假设您已经测试argc
至少2)。
酷,所以我会继续前进,并删除这一个安全标签。 – rook