我在投射时遇到问题,那么有没有办法投射以下类型:
char *result;
到一种
char *argv[100];
?
如果是这样,我将如何执行此操作或是否有安全的方法来执行此操作?
char * result
是一个字符串
和
char * argv[100]
是字符串数组。
您不能将字符串转换为字符串数组。但是,您可以创建一个字符串数组,其中第一个数组值为结果。
argv[0] = result;
char *result
是指向 a 的指针char
char *argv[100]
是 的数组char *
,所以实际上它是 a char **
(指向指针的指针)
请记住这一点:
int* arr[8];
// 一个 int 指针数组。
int (*arr)[8];
// 指向整数数组的指针
在这种情况下,这可能不是您想要做的。我想下一个问题是:你想做什么?或者为什么?
首先,简短的解释:
char *result;
该变量result
是一个指针,设置后它将指向单个字符。但是,如您所知,单个字符可以是以空 (\0) 字符结尾的字符串的开头。
在 C 语言中,优秀的程序员可以使用指针result
来索引字符串。
但是,在指针到达空字符之前,字符串的长度是未知的。
可以定义一个固定长度的字符串,在这种情况下代码:
char s[100];
现在,乐趣开始了。s
per Kernighan and Ritchie (K&R) 是指向以 0 结尾的字符串的指针。
所以,你可以编码:
s[0] = 'a';
*s = 'a';
s[1] = 'b';
*(s+1) = 'b';
这些是等价的陈述。
正如其他帖子中提到的,让我们在 argv 语句中添加显式括号:
char *(argv[100]);
因此,这是一个包含 100 个字符指针的数组(每个字符都可能是也可能不是字符串的开头)。
包含什么,转换后result
您希望包含什么?argv
例如,如果result
指向由分隔符分隔的字符串列表,例如"foo,bar,bletch,blurga,..
,并且您希望每个字符串都是 中的分隔元素argv
,例如
argv[0] == "foo"
argv[1] == "bar"
argv[2] == "bletch"
argv[4] == "blurga"
那么您无法通过简单的演员来完成此任务;您必须实际扫描result
并将各个指针分配给argv
.