C ++ cin.getline到char数组

时间:2014-08-25 14:13:04

标签: c++ arrays ifstream getline

我已经声明了一个数组:names[1000]; 和另一个数组data[1000];,暂时存储数据

后来使用ifstreamXML文件中读取数据。

然后,我使用cin.getline(data, 300)将数据放入data[]数组。

但是当我将data[]数组分配给names[]数组时,会发生错误:

invalid operands of types char[1000] and char[1000] to binary operator>>

代码:

char data[1000];
char names[1000];


ifstream openFile("myfile.xml");

if(!openFile)
{
    cout<<"File not found! please re-enter filename"<<endl;
}

while (openFile.getline (data, 300))
{
    if (data[0] == '<' && data[1] == 'n') // to only check the <name> xml tag
    {
        cout<<data<<endl;
        data >> names;
    }
}

知道为什么我不能将数据数组分配给names数组吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

“&GT;&gt;” 中运算符通常是为流定义的,但数据只是一个数组。 如果要复制内容,请使用string.h中的strncpy:

strncpy(names, data, 1000);

如果您想将字符串/数组视为流,请尝试使用stringstream。

顺便说一句,你可能想要使用C ++字符串而不是字符数组 - 它更方便(但效率不高)。

答案 1 :(得分:0)

因为您无法分配数组。完全没有。

您可能需要查看std::vectorstd::string,这些内容可以分配给其他很酷的内容。

如果您想坚持char数组,可以执行以下操作:

std::copy(std::begin(data), std::end(data), std::begin(names));

或(避免在第300个元素后复制垃圾):

std::copy(std::begin(data), std::begin(data) + 301, std::begin(names));

答案 2 :(得分:0)

运算符>>不用于分配!您可以使用strncpy这样分配

strncpy(names, data, 1000);

并添加include

#include <string.h>