将 argv 复制到新数组中
Copy argv into new array
我遇到了以下代码的分段错误。 有人可以解释为什么吗? 我希望能够将argv的内容复制到一个新的数组中,我称之为rArray。
#include <iostream>
using namespace std;
int main( int argc, char **argv)
{
char **rArray;
int numRows = argc;
cout << "You have " << argc << " arguments:" << endl << endl;
cout << "ARGV ARRAY" << endl;
for (int i = 0; i < argc; i++)
{
cout << argv[i] << endl;
}
cout << endl << endl << "COPIED ARRAY" << endl;
for(int i; i < numRows; i++)
{
for (int j = 0; j < argc; j++)
{
rArray[i][j] = argv[i][j];
}
}
for (int i = 0; i < argc; i++)
{
cout << "Copied array at index " << i << "is equal to " << rArray[i] << endl;;
}
cin.get();
}
程序输出:
/a.out hello world
You have 3 arguments:
ARGV ARRAY
./a.out
hello
world
COPIED ARRAY
Segmentation fault: 11
为什么我会收到此错误? 我该如何解决?
编辑:我得到了一个修复,将char **rArray
更改为string rArray
,并从那里动态分配大小。
其他人指出了代码的各种问题;如果您确实想复制argv
,请使用std::string
对象的std::vector
:
#include <string>
#include <vector>
int main( int argc, char **argv ) {
std::vector<std::string> args( argv, argv + argc );
}
您需要
为rArray
分配内存,并且还需要初始化外部循环计数器i
。
由于argv
的内容是常量字符串,因此您只需复制指向它们的指针即可
rArray = new char*[argc+1];
for(int i=0; i <= argc; i++) {
rArray[i] = argv[i];
}
// use rArray
delete [] rArray;
请注意,argv[argc]
保证是NULL
的。 我已经更新了循环以复制它(因此看起来不寻常i<=argc
退出条件)
如果你真的想复制字符串的内容(正如minitech所建议的那样),代码会变得有点复杂:
rArray = new char*[argc+1];
for(int i=0; i < argc; i++) {
int len = strlen(argv[i]) + 1;
rArray[i] = new char[len];
strcpy(rArray[i], argv[i]);
}
rArray[argc] = NULL;
// use rArray
for(int i=0; i < argc; i++) {
delete [] rArray[i];
}
delete [] rArray;
一件事是你没有初始化i
for(int i; i < numRows; i++)
^-- !
第二件事是没有分配rArray
我建议使用 std::vector<std::string>
,并将所有参数复制到 vector,您无需担心分配/释放内存。
相关文章:
- 如何将元素从向量转移到新数组?
- 如何在新数组较小时创建新数组并将旧数组的最后一个元素复制到新数组中?
- C++ "oldstyle container ":指针/数组/新 - 可能误会?
- 是复制了新数组还是指向结构中引用的数组的指针?
- 标量"新 T "与数组"新 T[1]"
- 如何将大括号初始值设定项用于动态大小数组和新数组?
- 如何按姓氏排序并打印新数组
- 如何修改数组,从中删除空格,然后将其存储在新数组中
- 有没有办法创建一个花哨的迭代器和相应的新数组,以便检查每个索引的索引值的条件?
- 从一系列的evens和赔率中,新数组是持续的第一个赔率
- 在新数组中获取随机值
- 将数组的特定元素移动到新数组
- 我如何使用此二叉搜索函数的修改后的最大/最小值创建新数组
- 如何从函数返回的数组中创建一个新数组
- 合并排序 - 返回新数组,而不是将合并的数组复制到输入数组
- C 2 DIM数组新获得0
- 创建新数组时写入位置时发生访问冲突
- 将 argv 复制到新数组中
- C++中的动态数组(指针数组还是新数组?
- 编译器认为新数组正在创建新对象