2012-03-17 4 views
0

テキストファイルから2次元の動的配列に文字を読み込む際にいくつかの問題が発生しました。「Problem_03_life.exeの0x011d155dで未処理の例外が発生しました:0xC0000005: 0xfdfdfdfdという場所にアクセス違反を作成しています。ここでテキストファイルの内容を2 * 2の配列に読み込むのが難しい

はコードです:ここでは

#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); 

}

は(私も空白を読む必要がある)ファイルのCONTENSです:私は間違っ

************* 
* ##  * 
*   * 
* #   * 
************* 

何をしていますポンターを使ってそれを読む?

ありがとうございます。

答えて

1

あなたのコードを持つ複数の問題があります:

  • 「1-あまりにも遠くに」行くための第二は。 "< ="を "<"に変更
  • それぞれの行の長さが同じであるかどうかによって異なります。異なる行の長さが異なると、問題が発生する
  • 返り値fgetcを格納するためにcharを使用しています。 fgetcが返されます
  • すでにEOFを返した後にfgetcに電話をかけようとしています。定義により、返すことができるのはfgetcです。

    • *(field + i)field[i]
    • *(*(field + i)+ j)のように記述することができるがfield[i][j]のように書くことができます:あなたはすることがありよりも難しい、あなたがそれを作っている別の戦略も

    を巻き戻すか、検討する必要があります

+0

ループの前にファイルの先頭に戻る必要があるのですか?そしてどうしたらいい?そして、ありがとう - 私は変更された他のすべてのもの。 –

+0

@DimaReshetnikov 'fseek'または' rewind'を見てください。 – cnicutar

+0

位置をファイルの先頭に設定するにはfseek()関数が必要ですか? –

関連する問題