char* const args[];
args
是一个数组。数组中的每个元素都是指向 的指针char
。这些指针是const
. 您不能修改数组的元素以指向其他任何地方。但是,您可以修改char
它们指向的 s。
const char* args[];
args
仍然是一个数组。数组中的每个元素仍然是指向char
. 但是,指针不是 const
。您可以修改数组的元素以指向其他地方。但是,您不能修改char
它们指向的 s。
图表时间:
Args:
┌───┬───┬───┬───┬───┬───┐
│ │ │ │ │ │ │ // In the first version, these pointers are const
└─╂─┴─╂─┴─╂─┴─╂─┴─╂─┴─╂─┘
┃ ┗━┓ ┗━┅ ┗━┅ ┗━┅ ┗━┅
▼ ▼
┌───┐ ┌───┐
│ c │ │ c │ // In the second version, these characters are const
└───┘ └───┘
通常,当您有一个指向字符的指针时,这些字符本身就是数组的一部分(C 风格的字符串),在这种情况下,它看起来像这样:
Args:
┌───┬───┬───┬───┬───┬───┐
│ │ │ │ │ │ │ // In the first version, these pointers are const
└─╂─┴─╂─┴─╂─┴─╂─┴─╂─┴─╂─┘
┃ ┗━━━━━━━┓ ┗━┅ ┗━┅
▼ ▼
┌───┬───┬┄ ┌───┬───┬┄
│ c │ c │ │ c │ c │ // In the second version, these characters are const
└───┴───┴┄ └───┴───┴┄
至于遍历数组,您正试图将args
数组视为空终止。大多数数组不是这样工作的。您应该使用数组中的索引进行迭代。
另请注意,您不能将数组和字符串文字一起添加(如 中*t ++ " "
)。将一侧转换为 astd::string
以使其更容易。
所以如果N
是 的大小args
:
for (size_t i = 0; i < N; i++) {
t_command.append(std::string(args[i]) + " "))
}