用单个 char* 填充向量,指向 C 中 char* 数组的基数
Posted
技术标签:
【中文标题】用单个 char* 填充向量,指向 C 中 char* 数组的基数【英文标题】:Filling vector with a single char*, pointing to the base of a char* array in C 【发布时间】:2020-10-23 15:17:12 【问题描述】:假设我有一个char*
的基础char*[]
。我知道数组中的每个char*
都是以null 结尾的,最后一个条目是NULL。
char* args[] = "foo", "bar", NULL;
如果我将其转换为char*
,我应该得到"foo"
的起始地址。
char* p = (char*)args;
现在,我想用char* p
变量填充char*
的向量。这可能吗?
我的代码:
vector<char*> arguments;
bool null_terminated = true;
while(p!=NULL)
if (null_terminated)
arguments.push_back((char *) p);
null_terminated = false;
if ((*(char*)p) == '\0')
null_terminated = true;
p++;
但是,这似乎不起作用。有不同的解决方案吗?
【问题讨论】:
为什么不使用char** p
?
"我应该得到"foo"
的起始地址" 不,你不应该。现在p
指向"foo"
(args[0]
) 的指针,而不是"foo"
。
@MikeCAT 哦,你的意思是我应该将参数转换为 char**
而不是 char*
?
没有。我的意思是p
的类型应该是char**
,然后就不需要强制转换了。
那么我认为你应该简单地做for(char** p = args; *p != NULL; p++) arguments.push_back(*p);
。这看起来像The XY Problem。为什么要使用char* p
?
【参考方案1】:
我认为使用reinterpret_cast
之类的东西可以使用char* p
填充向量,但这会很棘手、危险且无法保证。我不会推荐这个。
而不是这个,用args
的非空元素填充向量,我认为你应该使用指针指向数组char** p
的元素并使用它来遍历数组。
会是这样的:
for(char** p = args; *p != NULL; p++)
arguments.push_back(*p);
请注意,p
指向元素,取消引用的 *p
将是元素。
【讨论】:
以上是关于用单个 char* 填充向量,指向 C 中 char* 数组的基数的主要内容,如果未能解决你的问题,请参考以下文章
将 char* 推送到向量时出现问题,但在每次迭代后,它会将指向相同值缓冲区的指针添加到向量中 [已解决]