簡體   English   中英

C ++從文件讀取數據到char *

[英]C++ reading data from a file into a char*

我正在嘗試從文件中讀取行,並使用以下代碼將其保存到char * data []變量中:

fstream level;
level.open("level.txt");
char* row;
int i = 0;
char* data[3];

while (level >> row) {
    data[i] = row;
    cout << i << " " << data[i] << "\n";
    i++;
}

for (i = 0; i < 3; i++) {
    cout << "\n " << i << " = " << data[i];
}

level.close();

該文件的內容如下:

aaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaa

如您所料,第一個cout輸出以下內容:

0 aaaaaaaaaaaaaaaaaaaaaaaa
1 aaaaaaaaaaaaaaaaaaaaaaaa
2 aaaaaaaaaaaaaaaaaaaaaaaa

但是第二個輸出以下內容:

0 =
1 = 
2 = 

如果已刪除data []中的所有數據。 誰能告訴我為什么會這樣?

謝謝你的幫助。

由於您使用標准庫( cout ),為什么不使用string代替char*呢?

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

fstream level;
level.open("level.txt");
string row;
int i = 0;
string data[3];

while ((i<3) && (level >> row)) {
    data[i] = row;
    cout << i << " " << data[i] << "\n";
    i++;
}

for (i = 0; i < 3; i++) {
    cout << "\n " << i << " = " << data[i];
}

level.close();

您正在使用指針,而沒有為其分配內存! 您可以自行分配它們,但是如果讀取的行多於分配的內存,則必須注意。 請嘗試使用這些垃圾代碼。 它使用std向量和字符串,您不必分配內存。 您可能需要啟用編譯器的std-C11開關(std :: string :: push_back)

fstream level;
level.open("level.txt");
char row;
int i = 0;
std::vector<std::string> > data;
data.push_back(std::string());

while (level >> row) {
    if (row!='\n'){
        data.back().push_back(row);
        cout << row;
    else{
        data.push_back(std::string());
        cout << "\n";
}

for (int i = 0; i < data.size(); i++) {
    cout << "\n " << i << " = " << data[i].c_str();
}

level.close();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM