我成功编写了将包含文本数据的.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]'等等。 –