我在编写一个快速程序时遇到了一些问题,目的是给定一个矩阵(二维分配的二维数组),将其保存到文件中。当检查结果输出文件时,我在文件的每一行的末尾给出了以下的符号,用粗体和红色表示“\ 00”。 这是我的代码:
/*\param n number of rows
\param m number of columns
\param mat pointer to the matrix
\param f file already opened in write mode where to write the matrix
*/
int save_to_file (char** mat, unsigned n, unsigned m, FILE* f){
int i, j;
for(i = 0;i <= n; i++)
for(j = 0; j <= m; j++)
if(j == m)
fprintf(f, "%c\n", mat[i][j]);
else
fprintf(f, "%c", mat[i][j]);
if (f == NULL)
return -1;
else
return 0;
}
问题在于我在文件上写的方式吗?如果是这样的话,有人可以帮我解决吗?
答案 0 :(得分:0)
代码的第一个问题是for循环中的范围。如果您有n
行,则循环必须从0
转到n-1
(包括两者)。所以这些界限:
for(i = 0;i <= n; i++)
for(j = 0; j <= m; j++)
if(j == m)
应
for(i = 0;i < n; i++) // Remove =
for(j = 0; j < m; j++) // Remove =
if(j == m-1) // Insert -1
第二个问题是,在使用f
之后,您检查NULL
是f
。这是一个坏主意,如果f
为NULL
,它可能/会导致程序崩溃。而是将检查作为函数中的第一件事:
int save_to_file (char** mat, unsigned n, unsigned m, FILE* f){
if (f == NULL) return -1;
....
....
return 0;
}
第三个问题是您访问矩阵的方式。如果您的矩阵是2D数组(当您在文本中写入而不发布代码时),则无法正确地将其作为char**
进行访问。当你有一个指向字符数组的char指针数组时,可以使用char**
。但不适用于2D阵列。
下面是该函数如何根据2D数组查找矩阵的示例。
#include <stdio.h>
int save_to_file (unsigned n, unsigned m, char mat[n][m]){
int i, j;
for(i = 0; i < n; i++)
for(j = 0; j < m; j++)
if(j == m-1)
printf("%c\n", mat[i][j]);
else
printf("%c", mat[i][j]);
}
int main(void) {
char a[2][3] = {{'a','b','c'},{'d','e','f'}};
save_to_file(2,3,a);
return 0;
}
输出:
abc
def
注意:上面的函数打印到stdout而不是文件,但可以使用fprintf