C ++中的向量在Windows和Ubuntu中表现不同

时间:2013-09-05 10:41:57

标签: c++ string vector g++ g++-4.7

我必须比较存储在向量中的两个字符串。 Windows中的比较工作正常,它使用mingw-g ++编译器(版本4.4.1)。

但是当我尝试在运行g ++版本4.7.2的Ubuntu中做同样的事情时,我遇到了奇怪的问题。我在下面列出了它们:

  1. 当我尝试单独打印元素时,它们输出正确,两个字符串都相同。

  2. 但是当我尝试使用==运算符或strcmp()来比较它们时,即使它们是相同的,它们也是不相等的。

  3. 当我尝试打印上面比较的元素时,某些字符串正在替换第一个字符串的值。代码如下。理想情况下,不应该执行if循环,但它仍在执行并打印一些垃圾值而不是v1 [i]。

  4. vector<string> v1 = r1->GetSchema().GetAttrTypes();
    vector<string> v2 = r2->GetSchema().GetAttrTypes();
    for(i=0; i<v2.size();i++)
        if(v1[i] != v2[i])
            cout << v1[i] << " " << v2[i] << " awdsd" << endl;
    

    我不知道该搜索这些错误的内容。我从同一个文件中获取字符串并存储在Windows和Ubuntu中的向量中。

    编辑:我在这里附上部分代码。函数右侧返回字符串向量。我不能粘贴classe的代码,因为它是非常大的代码。

2 个答案:

答案 0 :(得分:0)

问题必须出在:

r1->GetSchema().GetAttrTypes();

这个函数必须与它的std::string的创建方式有关。 你能告诉我们代码吗?

答案 1 :(得分:0)

嗯,一切都很好,除了我正在阅读输入字符串的文件。由于我在Windows上创建了该文件,因此它的行尾不同(\ r \ n),就像在Ubuntu中一样(\ n)。

在Ubuntu我不得不转换我正在阅读的文本文件输入Unix模式。 之后一切都很好。

我不知道我是如何错过这一点的。

感谢您的投入。