0

入力テキストファイルから行を読み取り、読み取りが完了したら、配列array1
に行を格納 しています。配列内の要素を出力したい..動的メモリ割り当てを実行したい..しかし、それは私がこれを取得した後一部の作業..これまでの私のコード:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 256

int main(){

  FILE* fp;
  fp=fopen("input.txt","r");
  char currentline[MAX_LEN];
  int i=0;

  char *array1;
  array1 = malloc(10*MAX_LEN);
  while(fgets(currentline,MAX_LEN,fp)!=NULL && i<10){

    strcpy((char *)&array1[i],currentline);
    printf("%s\n",currentline);

    printf("array1= %s\n",(&array1[i]));
    i++;
  }
  for (;i>=0;i--){
    printf("%s\n",(&array1[i]));
  }
}

input1.txt

101
84
65
13
hello
90
24
94
73
70
68
94
65

出力:

101

array1= 101

84

array1= 84

65

array1= 65

13

array1= 13

hello

array1= hello

90

array1= 90

24

array1= 24

94

array1= 94

73

array1= 73

70

array1= 70

0

70

770

9770

29770

929770

h929770

1h929770

61h929770

861h929770

1861h929770

私がやりたいのは、各要素を印刷することです..しかし、各行の最初の文字を印刷することです..何が原因ですか?

4

1 に答える 1

2

この行で:

    strcpy((char *)&array1[i],currentline);

currentline を array1 の i 番目の要素からコピーします。
したがって、基本的には、最初に currentLine を からコピーしarray[0]、次に最初の要素を残して、次の currentLine をコピーarray[1]します。最初の要素を除いて、前の currentLine を上書きするたびに。
あなたがしたいこと(私は思う)は次のとおりです:

    strcpy(&array1[i*MAX_LEN],currentline);

これにより、すべての currentLine が 256 文字の独自のブロックに保存されます。
i=0 の場合は array[0] から書き始め、
i=1 の場合は array[256]...

また、それらの醜い (char *) キャストをドロップします。ここでは不要です。
array1 も逆参照する前に、malloc が機能しているかどうかを確認する必要があります。

于 2013-10-19T23:10:39.623 に答える