新手在这里。我试图将C ++程序的args连成一个char数组。出于某种原因,strcat
有选择地忽略for循环中的argv[2]
:
#include <cstring>
int main(int argc, char *argv[]) {
char *argstr = argv[1];
for(int i=2; i < argc; i++) {
argstr = std::strcat(argstr, " ");
argstr = std::strcat(argstr, argv[i]);
}
std::cout << argstr << std::endl;
return 0;
}
该文件名为qtimer
。所以,运行的预期输出:
qtimer asdf 1 2 3
将是:
asdf 1 2 3
但是它正在输出:
asdf 2 3
(在asdf
之后有两个空格)
有人可以解释为什么会这样吗?还有,有更好的方法吗?
答案 0 :(得分:10)
您要附加argv[1]
中存储的字符串,但您不知道那里有空格。你正在覆盖不属于你的记忆。
这是未定义的行为,任何事情都可能发生。
最有可能的是,你要覆盖的内存是存储其他参数的内存,所以当你访问它们时,它们已经被破坏了。
你应该在C ++中使用std::string
进行字符串操作,它会更好更安全。