我无法弄清楚为什么这段代码不起作用.我已经看到了这一点,但我仍然没有得到它.我得到一个分段错误(11)并且看不到argv从中打印的数组testArray.
我的代码到目前为止
#include <iostream>
int main(int argc, char**argv) {
char testArray[argc];
for (int i=0; argc; i++){
std::cout << argv[i] << std::endl;
testArray[i] = *argv[i];
}
for (int i=0; argc; i++){
std::cout << testArray[i] << std::endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在你的代码中,改变
for (int i=0; argc; i++){
Run Code Online (Sandbox Code Playgroud)
至
for (int i=0; i < argc; i++){
Run Code Online (Sandbox Code Playgroud)
否则,显然没有对for循环进行条件检查(通常argc会>= 1保持不变),将其转换为无限循环.
FWIW,这种未绑定的i原因增量,testArray[i]用于访问超出范围的内存,从而导致 未定义的行为.
也就是说,还有更多让你烦恼的事情.没有什么叫做c和c ++代码.它们是非常不同的,应该是这样的.请不要混淆它们.他们每个人都有自己的优点/缺点,使用适合你的,但不能同时使用代码.
现在,关于数组的复制,argv是一个指向argv[i]s 的指针,它保存命令行参数.*argv[i]一次不给你整个数组,它只指向argv[i]数组中的第一个元素.所以,
testArray[i] = *argv[i];
Run Code Online (Sandbox Code Playgroud)
不复制数组.要复制它,
strlen(argv[i]) + 1strcpy() 复制argv[i]到缓冲区.你需要使用std::copy().