如何在C ++中将char数组转换为字符串?

时间:2016-07-05 20:18:29

标签: c++ arrays string

我有一个名为firstFileStream[50]的char数组,它使用fstream从infile写入。

我想将此char数组转换为名为firstFileAsString的字符串。如果我写string firstFileAsString = firstFileStream;它只会写入数组中的第一个单词并停在第一个空格或空字符处。如果我写firstFileAsString(firstFileStream),我会得到相同的输出。

如何将整个char数组(包括其中的所有单词)写入字符串?

以下是读入和写入的代码:

string firstInputFile = "inputText1.txt";
char firstFileStream[50];

ifstream openFileStream;
openFileStream.open(firstInputFile);

if (strlen(firstFileStream) == 0) { // If the array is empty
    cout << "First File Stream: " << endl;
    while (openFileStream.good()) { // While we haven't reached the end of the    file
        openFileStream >> firstFileStream;  
    }
    string firstFileAsString = firstFileStream;

}

2 个答案:

答案 0 :(得分:0)

我的问题,正如zdan指出的那样,我只是在阅读文件的第一个单词,所以我使用istreambuf_iterator<char>将内容直接分配给字符串而不是首先是字符数组。然后可以将其分解为字符数组,而不是相反。

答案 1 :(得分:0)

openFileStream >> firstFileStream;

只从文件中读取一个单词。

读取整个文件的简单示例(至少达到缓冲容量)如下所示:

openFileStream.read(firstFileStream, sizeof(firstFileStream) - 1); 
// sizeof(firstFileStream) - 1 so we have space for the string terminator
int bytesread;
if (openFileStream.eof()) // read whole file
{
    bytesread = openFileStream.gcount(); // read whatever gcount returns
}
else if (openFileStream) // no error. stopped reading before buffer overflow or end of file
{
    bytesread = sizeof(firstFileStream) - 1; //read full buffer
}    
else // file read error
{
    // handle file error here. Maybe gcount, maybe return.
}
firstFileStream[bytesread] = '\0'; // null terminate string