ファイルを開き、その内容を1行ずつ読み取り、これらの各行を配列に格納するコードを記述しようとしています。
最初にファイルを開いて行数を数えます。各行は固定長なので、次のようにします。
char buf2[LINE_LENGTH];
int in2 = open("toSend2", O_RDONLY);
int number_of_lines = 0;
for (;;)
{
char* p2 = buf2;
int count = read (in2, p2, LINE_LENGTH);
if (count < 0)
{
printf("ERROR");
break;
}
if (count == 0) break;
number_of_lines++;
printf("count: %d \n",count);
printf("File 2 line : %s", p2);
printf("\n");
}
close (in2);
これまでのところ、これはうまく機能します。number_of_linesは実際にファイル「toSend2」の行数であり、私の各printfはそのファイルに含まれる行です。
行数で文字列の配列を作成し、基本的にファイル全体をもう一度調べますが、今回は各行を配列に格納します(数を見つけるためのより良い方法がおそらくあります)ファイル内の行の数ですが、私が試したすべてが失敗しました!)
char * array[number_of_lines];
int b=0;
int in3=0;
in3 = open("toSend2", O_RDONLY);
for (;;)
{
char* p3 = buf3;
int count = read (in2, p3, LINE_LENGTH);
if (count < 0)
{
printf("ERRORRRRRR");
break;
}
if (count == 0) break;
array[b] = p3;
b++;
printf("count: %d \n",count);
printf("FILE 2 LINEEEEEE : %s", p3);
printf("\n");
}
close(in3);
もちろん、これは機能しません。私の各printfは正しい行にファイルの最後の行を加えたものです。たとえば、最初のprintfは次のようになります。
FILE 2 LINEEEEEEE:「ファイルの1行目」「ファイルの最後の行」
そして、このforループの後、配列の内容をトレースすると、その中のすべての項目は単にファイルの最後の行になります。これは、毎回同じポインタ(その時点で別の行を指している)を配列に配置するだけだからだと思いますが、最終的には最後の行を指すため、すべてが最後の行になります。
問題をどのように解決しますか?
ps:私はCを始めたばかりなので、それについての基本的なことさえ知っていると思い込まないでください:(