我正在構建一個名為 Board 的類,它將從 txt 檔案中獲取它的詳細資訊。
#define ROW 25;
#define COL 80;
class Board
{
char _board[ROW][COL] = {0};
public:
Board(string name); // our new constructor - reads map from file.
};
它接收字串名稱,并嘗試打開具有特定名稱的檔案。如果我們確實在正確的檔案中,我想從中讀取字符,并將它們復制到板上。我一直在嘗試幾件事,總結在這段代碼中:
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
Board::Board(string name)
{
string line;
ifstream file(name);
int i = 0;
if (file.is_open())
{
while (!file.eof())
{
(1) getline(file, line);
(2) const char* test = line.c_str();
(3) strcpy_s(_board[i], test);
(4) _board[i] = line;
i ;
}
// MORE FUNCTIONS NOT RELEVANT TO THIS QUESTION
}
}
我收到以下錯誤:對于 (3):程式崩潰。對于(4):運算式必須是可修改的左值。對于(1)、(2):測驗和線路運行良好。
有沒有其他更簡單的方法可以在不使用丑陋回圈的情況下將字串復制到 char* 并復制每個字符?為什么 (3) 會導致我的程式崩潰?
提前致謝!
uj5u.com熱心網友回復:
無關,但void main()已被棄用多年,并且在當前版本的標準中是不正確的:它應該是int main()……
接下來while (!file.eof())是一件常見但可怕的事情:eof只有在讀取操作沒有回傳任何內容后才變為真。這意味著您將處理最后一行兩次......
對于您的錯誤:
(4) _board[i] 是一個陣列,陣列不能在賦值的左邊(慣用語:它不是左值)
(3):
strcpy_s是不是一個下拉更換為strcpy和你的編譯器應該有EMIT警告(任何正確的編譯器將有...)。它應該是:strcpy_s(_board[i], COL, test);
uj5u.com熱心網友回復:
#include <iostream>
#include <fstream>
#include <string>
#define ROW 25;
#define COL 80;
int i=0;
class Board
{
char _board[ROW][COL] = {0};
public:
Board(string name); // our new constructor - reads map from file.
};
Board::Board(string name)
{
fstream newfile;
newfile.open(name,ios::in);
if (newfile.is_open()){
string tp;
while(getline(newfile, tp)){
strcpy(_board[i], tp);
i ;
}
newfile.close();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/372049.html
下一篇:如何裁剪大括號之間的文本
