C++ strcat 忽略了一个论点

C++ strcat is ignoring an argument?

本文关键字:一个 strcat C++      更新时间:2023-10-16

新手在这里。我正在尝试将C++程序的参数连接到单个字符数组中。出于某种原因,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后有两个空格(

谁能解释为什么会这样?另外,有没有更好的方法可以做到这一点?

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

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

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

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