2

我在投射时遇到问题,那么有没有办法投射以下类型:

char *result; 

到一种

char *argv[100];

?

如果是这样,我将如何执行此操作或是否有安全的方法来执行此操作?

4

4 回答 4

4

char * result是一个字符串

char * argv[100]是字符串数组。

您不能将字符串转换为字符串数组。但是,您可以创建一个字符串数组,其中第一个数组值为结果。

argv[0] = result;
于 2013-09-17T20:40:19.367 回答
2

char *result是指向 a 的指针char
char *argv[100]是 ​​的数组char *,所以实际上它是 a char **(指向指针的指针)

请记住这一点: int* arr[8];// 一个 int 指针数组。
int (*arr)[8];// 指向整数数组的指针

在这种情况下,这可能不是您想要做的。我想下一个问题是:你想做什么?或者为什么?

于 2013-09-17T20:40:22.790 回答
0

首先,简短的解释:

  char *result;

该变量result是一个指针,设置后它将指向单个字符。但是,如您所知,单个字符可以是以空 (\0) 字符结尾的字符串的开头。

在 C 语言中,优秀的程序员可以使用指针result来索引字符串。

但是,在指针到达空字符之前,字符串的长度是未知的。

可以定义一个固定长度的字符串,在这种情况下代码:

 char s[100];

现在,乐趣开始了。sper Kernighan and Ritchie (K&R) 是指向以 0 结尾的字符串的指针。

所以,你可以编码:

 s[0] = 'a';
 *s   = 'a';

 s[1] = 'b';
 *(s+1) = 'b';

这些是等价的陈述。

正如其他帖子中提到的,让我们在 argv 语句中添加显式括号:

char *(argv[100]);

因此,这是一个包含 100 个字符指针的数组(每个字符都可能是也可能不是字符串的开头)。

于 2013-09-17T20:55:06.457 回答
0

包含什么,转换后result您希望包含什么?argv

例如,如果result指向由分隔符分隔的字符串列表,例如"foo,bar,bletch,blurga,..,并且您希望每个字符串都是 中的分隔元素argv,例如

argv[0] == "foo"
argv[1] == "bar"
argv[2] == "bletch"
argv[4] == "blurga"

那么您无法通过简单的演员来完成此任务;您必须实际扫描result并将各个指针分配给argv.

于 2013-09-17T21:34:48.310 回答