C ++ strcat忽略了一个参数?

时间:2016-02-01 08:59:01

标签: c++ argv strcat

新手在这里。我试图将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之后有两个空格)

有人可以解释为什么会这样吗?还有,有更好的方法吗?

1 个答案:

答案 0 :(得分:10)

您要附加argv[1]中存储的字符串,但您不知道那里有空格。你正在覆盖不属于你的记忆。

这是未定义的行为,任何事情都可能发生。

最有可能的是,你要覆盖的内存是存储其他参数的内存,所以当你访问它们时,它们已经被破坏了。

你应该在C ++中使用std::string进行字符串操作,它会更好更安全。