【问题标题】:duplicating two string arrays复制两个字符串数组
【发布时间】:2013-12-16 17:44:44
【问题描述】:

我有 const char 数组,我想在其中更改(排序)贵重物品。所以我需要创建第二个不是 const 的(我相信没有其他方法)。 该字段具有固定的列数 (2),但不是行数。

所以我首先尝试了这个:

count = 0;           // count how many rows (i have 100% Null at the end)
while(arrayConst[count][0]){
    count ++;
}

char* arrayEditable [count][2]; // deslare new field

for(i = 0; i < count; i++){    // and copy everithing to new one
    arrayEditable[i][0] = (char*)arrayConst[i][0];
    arrayEditable[i][1] = (char*)arrayConst[i][1];
}

这很好用(程序正在运行),除了我从编译器收到这条消息:

ISO C++ forbids variable length array ‘arrayEditable’

所以看起来我需要动态分配它。 我尝试过这样的事情:

count = 0;
while(arrayConst[count][0]){
    count ++;
}

char (*arrayEditable)[2];
arrayEditable = (char (*)[2])malloc(count * 2 * sizeof(char));

for(i = 0; i < count; i++){
    arrayEditable[i][0] = arrayConst[i][0];
    arrayEditable[i][1] = arrayConst[i][1];
}

但它仍然不起作用 - 现在我得到了一些奇怪的信息:

expected ‘const char *’ but argument is of type ‘char’|

而且我也相信,我错误地分配了该字段,因为我不知道该字符串要多长时间才能溢出(但也许我弄错了)。 那么我应该如何复制该字段?我只是不需要 const 字段来更改其中的值(排序);

【问题讨论】:

  • 我刚刚发现,我可以立即更改该 const 数组,所以我根本不需要欺骗它。我以为你不能改变成本数组,但看起来你可以....

标签: c arrays duplicate-data


【解决方案1】:

您标记了这个 C 并且您正在使用可变长度数组 (VLA),它是 C 的一项功能。代码的风格也是C,绝对不是C++。然而您的编译器错误表明您正在尝试使用 C++ 编译器编译 C 代码,这是错误的,您应该立即停止这样做。

用 C 编译器编译你的代码,错误就会消失。

哦,当我们这样做的时候:do not ever cast the return value of malloc()! 只是不要。

【讨论】:

  • 啊,你是对的,btu 这是给定的编译器,我必须使用这个。它应该工作得很好,什么时候我会解决这个小问题;)
  • @ßluray 您不能在 C++ 中使用 VLA。但是,如果您必须使用 C++,那么请编写 C++ 代码。使用vectorstring最多 operator new[]等。不要乱用VLA和malloc()
  • 如果他使用 C++ 编译器进行编译,他需要在 malloc() 上使用强制转换,我认为这个禁令被夸大了。
  • @JonathanLeffler No. malloc() 永远不会被强制转换。在 C 中它不会被强制转换,因为它是多余的。在 C++ 中,它不会被强制转换,因为它根本不会被使用。在 C++ 中,字符串数组是 vector&lt;string&gt;char (*arrayEditable)[2] = (char (*)[2])malloc(count * 2 * sizeof(char)); 不是你想在 C++ 代码中看到的东西。
  • 那么我们将不得不同意不同意。
猜你喜欢
  • 1970-01-01
  • 2017-11-19
  • 1970-01-01
  • 2021-07-28
  • 2016-06-18
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
  • 2020-11-04
相关资源
最近更新 更多