将argv转换为新数组

kez*_*zos 2 c++ arrays

我无法弄清楚为什么这段代码不起作用.我已经看到了这一点,但我仍然没有得到它.我得到一个分段错误(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)

Sou*_*osh 9

在你的代码中,改变

  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)

不复制数组.要复制它,

在C.

  1. 您需要分配一个大小的缓冲区 strlen(argv[i]) + 1
  2. 用于strcpy() 复制argv[i]到缓冲区.

在C++中

你需要使用std::copy().