gpt4 book ai didi

objective-c - 简单的? argv[] 转换为 char*

转载 作者:行者123 更新时间:2023-11-30 14:27:02 25 4
gpt4 key购买 nike

所以我有一个示例应用程序源,我正在尝试根据自己的目的进行修改

它基本上是运行一个 shell 脚本(下面的测试示例),但使用苹果的安全框架(请参阅下面的链接了解原始来源)。

#!/bin/bash
echo $@
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 会有帮助,但同时有什么想法吗?

如果有帮助的话,这是我正在使用的源的链接,

http://developer.apple.com/library/mac/documentation/security/conceptual/authorization_concepts/03authtasks/authtasks.html#//apple_ref/doc/uid/TP30000995-CH206-TPXREF33

最佳答案

argv 已经采用您需要的格式(以 NULL 结尾的 char * 指针数组),因此您可以执行以下操作:

char **myArguments = &argv[2];

(假设您已经测试过 argc 至少为 2)。

关于objective-c - 简单的? argv[] 转换为 char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8235784/

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