char* const args[] definition char* const args[]定义

16 浏览
0 Comments

char* const args[] definition char* const args[]定义

我对这里的const用法有些困惑:

char* const args[];

这是不是意味着args不能指向新的地址?它与下面的写法有什么不同:

const char* args[];

另外,我想通过一个for循环遍历这个列表,并将其值追加到一个字符串中:

string t_command;
for(char** t = args; (*t) != NULL; t++ && t_command.append(*t + " ")) {}

我在这里做错了什么,但是我搞不清楚是什么。

0
0 Comments

在上述内容中,我们可以看到对于`char* const args[]`这个问题的出现原因以及解决方法。

该问题的出现原因是在定义`char* const args[]`时,`args`是一个指向`char`类型的常量指针数组。这意味着指针本身不能被修改,但它们所指向的内容可以被修改。

而解决方法是将指向`char* const args[]`的第一个元素的指针的类型定义为指向常量指针的指针。这样可以通过以下方式使用该指针:

for (char * const * t = args; *t; ++t) {
    t_command.append(*t + " ");
}

以上就是关于`char* const args[]`问题的出现原因以及解决方法的内容。

0
0 Comments

问题的出现原因是在定义char* const args[]时,args是一个数组,数组中的每个元素都是指向char的指针,这些指针是const的,也就是说不能将数组的元素指向其他地方,但可以修改它们指向的char

而解决方法是将char* const args[]改为const char* args[],这样数组中的元素指针就不再是const的,可以修改它们指向的位置,但不能修改指向的char

在遍历数组时,不能将args数组视为以空字符结尾的字符串数组。应该使用索引来遍历数组。

另外需要注意的是,不能将数组和字符串字面量相加(例如*t ++ " ")。可以将其中一边转换为std::string,这样做会更加方便。

所以,如果Nargs的大小,可以使用以下代码来遍历数组:

for (size_t i = 0; i < N; i++) {
  t_command.append(std::string(args[i]) + " "))
}

0