将常量字符 * 转换为非常量字符*



我正在用 c++ 编写一个程序来比较两个大的 XML 文件,并创建一个包含更改的产品(节点)的标识符和更改的文件。为此,我正在使用pugixml。

我现在是一名PHP开发人员,自从我使用c ++以来已经有一段时间了,所以我认为我忽略了一些微不足道的事情,但是经过几个小时的在线搜索,我仍然没有找到我的问题的解决方案,即:

child_value函数只是给出元素标签之间的值,返回一个常量字符 *。我正在尝试做的是将所有值放在一个数组中,并将它们与所有其他产品(在类似数组中)的值进行比较。

转到

下一个产品时出现问题,我需要覆盖数组中的值,我认为这是我得到的分割错误的根源。所以我的问题是:

我需要

使用该常量字符*进行比较,但是我需要覆盖这些值,以便进行下一次比较,最好的方法是什么?我已经尝试了strcpy,const_cast(如下面的示例代码)和大量其他建议,但似乎都产生了结果在相同的分割错误中。

它可以编译,但当它尝试覆盖第一个值时,它只会在第二次迭代时崩溃。

for (xml_node groupCurrent = groupsCurrent.child("group");groupCurrent;groupCurrent = groupCurrent.next_sibling("group")){
    xml_node productsCurrent = groupCurrent.child("products");
    size_t nrProductsInGroupCurrent = std::distance(productsCurrent.children().begin(), productsCurrent.children().end());
    nrProductsTotalCurrent = nrProductsTotalCurrent + nrProductsInGroupCurrent;
    for (xml_node productCurrent = productsCurrent.child("product");productCurrent;productCurrent = productCurrent.next_sibling("product")){
        int numberAttributesC=0;
        char * childrenCurrent[32];
        for (xml_node attributeCurrent = productCurrent.first_child();attributeCurrent ;attributeCurrent= attributeCurrent.next_sibling()){
            char * nonConstValue = const_cast<char *> (attributeCurrent.child_value());
            childrenCurrent[numberAttributesC]=nonConstValue;
            numberAttributesC++;
        }
        /*for(int i = 0;i<numberAttributesC;i++){
            std::cout<<childrenCurrent[i];
        }*/
        //xml_node groupsNew = docNew.child("product_database");
    }
}

任何帮助,建议或意见将不胜感激。如果我同时自己找到解决方案,我会在这里发布。

问候反

PS:在使用 gcc 版本 4.8.2 的 ubuntu 上

只需使用vector and string

std::vector<std::string> childrenCurrent;
for (xml_node attributeCurrent = productCurrent.first_child();attributeCurrent ;attributeCurrent= attributeCurrent.next_sibling())
{    
  std::string value = attributeCurrent.child_value();
  childrenCurrent.push_back(value);    
}

注意:我假设child_value正在返回const char*

string将复制子值,从而消除任何内存问题,并且使用该vector将使您不必担心管理潜在属性的数量。

相关内容

  • 没有找到相关文章

最新更新