gpt4 book ai didi

c - 将文本文件的内容读入 2*2 数组时遇到困难

转载 作者:行者123 更新时间:2023-11-30 15:58:27 25 4
gpt4 key购买 nike

我在将文本文件中的字符读取到二维动态数组时遇到了一些困难 - 它失败并显示“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来读它做错了什么?

谢谢。

最佳答案

您的代码存在多个问题:

  • 第二个“太过分”了。将“<=”更改为“<”
  • 您依赖于每行具有相同长度的事实。一旦不同的线有不同的长度,你就会遇到麻烦
  • 您正在使用 char 来存储 fgetc 的返回值。 fgetc 返回 int
  • 您尝试在返回 EOF 后调用 fgetc。根据定义,它只能返回fgetc。您需要倒带或考虑不同的策略

而且,你让事情变得比原来更难:

  • *(field + i) 可以写成 field[i]
  • *(*(field + i)+ j) 可以写成 field[i][j]

关于c - 将文本文件的内容读入 2*2 数组时遇到困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9748621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com