我成功編寫了將包含文本數據的.dat文件寫入一維數組的代碼。但是,當我試圖開發我的代碼將這些文件寫入二維數組時,我一直在指出問題。下面的代碼是什麼,我試圖修復:將文件寫入二維數組
while (getline(fin, line)) {
char* buf = _strdup(line.c_str());
// parse the line into blank-delimited tokens
int n = 0; // a for-loop index
int s = 0;
int m = 0;
// array to store memory addresses of the tokens in buf
const char* token[MAX_TOKENS_PER_LINE][MAX_TOKENS_PER_LINE] = {};
char *next_token;
// parse the line
token[0][0] = strtok_s(buf, DELIMITER, &next_token); // first token
//token[0] = strtok(buf, DELIMITER); // first token
if (token[0][0]) {
// zero if line is blank
for (n = 1; n < MAX_TOKENS_PER_LINE; n++) {
token[m][n] = strtok_s(0, DELIMITER, &next_token);
//token[n] = strtok(0, DELIMITER);
if (!token[m][n]) break; // no more tokens
m++;
}
}
// process (print) the tokens
for (int i = 0; i < n; i++) // n = #of tokens
for (int j = 0; j<m; j++) {
cout << "Token[" << i << "," << j << "] = " << token[i][j] << endl;
cout << endl;
}
fin.clear();
fin.close();
free(buf);
}
顯然,第一行後的第一個令牌token[0][0]
將指向垃圾爲不同的數據將在buf
。如何避免這個問題?
在你的打印循環中,你可以使用'i'作爲第一個索引,'j'作爲第二個索引,'j'使用'm'。但是,當你閱讀時,你使用'm'作爲第一個索引,'n'作爲第二個索引。 –
此外,你讀了一個循環,但關閉你從循環內讀取的文件? –
你總是在標記循環中增加'm'和'n',這意味着你將設置'token [0] [0]',然後'token [1] [1]'等等。 –