我在将文本文件中的字符读入二维动态数组时遇到了一些困难 - 它在“Problem_03_life.exe中的0x011d155d处未处理的异常:0xC0000005:访问冲突写入位置0xfdfdfdfd”中失败。
这是一段代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[]){
if(argc <= 1) printf("Program needs two arguments: input file and output file!");
FILE* f;
f = fopen(argv[1],"r");
if(f == NULL) printf("File cannot be opened!\n");
/* Determining how many lines and length of string */
int m = 0;
int n = 0;
char c;
while((c = fgetc(f))!=EOF) {
if(c == '\n') {n++;}
else m++;
}
m /= n; // counting quantity of chars in one line
/* here i'm allocating memory for array (am i right?) */
char** field = (char**)malloc(n*sizeof(char*));
for(int i = 0; i < n; i++) {
*(field + i) = (char*)malloc(m*sizeof(char));
}
int i = 0, j = 0;
for(i = 0; i <= n; i++){
for(j = 0; j <= m; j++){
*(*(field + i)+ j) = fgetc(f); // Here i get an error
}
}
fclose(f);
}
这是一个文件的竞争(我也需要读取空格):
*************
* ## *
* *
* # *
*************
使用ponters读取它时我做错了什么?
谢谢。
答案 0 :(得分:1)
您的代码存在多个问题:
fgetc
的返回值。 fgetc
返回int
fgetc
已经返回EOF
后尝试致电fgetc
。根据定义,它只能返回*(field + i)
。您需要回放或考虑不同的策略此外,你正在努力使它变得更难:
field[i]
可以写成*(*(field + i)+ j)
field[i][j]
可以写成{{1}}