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

C++ strcat is ignoring an argument?

这里是新手。我正在尝试将 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 3asdf后有两个空格)

谁能解释这是为什么?另外,有更好的方法吗?

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

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

很可能,您要覆盖的内存是存储其他参数的内存,因此当您访问它们时,它们已经损坏。

C++中的字符串操作应该使用std::string,这样更好更安全。