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 3
(asdf
后有两个空格)
谁能解释这是为什么?另外,有更好的方法吗?
您正在追加存储在 argv[1]
中的字符串,但您不知道那里有 space。你正在覆盖不属于你的记忆
这是未定义的行为,任何事情都可能发生。
很可能,您要覆盖的内存是存储其他参数的内存,因此当您访问它们时,它们已经损坏。
C++中的字符串操作应该使用std::string
,这样更好更安全。
这里是新手。我正在尝试将 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
后有两个空格)
谁能解释这是为什么?另外,有更好的方法吗?
您正在追加存储在 argv[1]
中的字符串,但您不知道那里有 space。你正在覆盖不属于你的记忆
这是未定义的行为,任何事情都可能发生。
很可能,您要覆盖的内存是存储其他参数的内存,因此当您访问它们时,它们已经损坏。
C++中的字符串操作应该使用std::string
,这样更好更安全。