0

lseek と assigment のバッファの使用に問題があります。目的は、ファイルを読み取り、すべての文字「a」を「?」に変更することです。関数とバッファがどのように機能するかを理解するためにいくつかのマイナーなプログラムを実行していますが、問題が発生しています.私のファイル「teste」には「abcabcabc」しか含まれていないと想像してください。私がこれを行う場合:

int fd = open("teste", O_RDWR);
char buf[1];
int fptr = lseek(fd, 0, SEEK_SET);
fflush(stdout);
read(fd, buf, 1);
printf("%s\n", buf);

コンソール「a」に乗ると、ポインタを最初に置いたので、最初の文字がよく読めます。しかし、printf の前に if 条件を実行すると、次のように buf と 'a' を比較します。

if(buf == 'a') printf("%s\n", buf);

それは機能しません。何も出力しないため、if ステートメントに入りません。ファイルのすべての「a」を変更できるように、バッファを文字と比較する必要があります。これを行うにはどうすればよいですか彼ら?

わかりました、この部分は以下の回答によりすでに解決されていますが、今はすべてのファイルを読み込んで各文字を「a」と比較し、機能しているかどうかを確認するためだけに単純な printf を作成しようとしています..私はこれを書きました:

int fd = open("teste", O_RDWR);
char buf[1];
int fptr = lseek(fd, 1, SEEK_SET);
fflush(stdout);
read(fd, buf, 1);
while(fptr > 0){
  read(fd, buf, 1);
  if(buf[0] == 'a'){
    printf("%s\n",buf);
  }
  fflush(stdout);
  fptr=lseek(fd, (off_t)(1), SEEK_CUR);
}
close(fd);

しかし、現在は機能しています.1つの「a」のみを出力し、閉じず、何もしません..無限サイクルのようですが、ifステートメントを入力しません。どうしたの?

4

2 に答える 2

2
  1. printf("%s\n", buf);UBです。%s終了 NULL文字列が必要です。Use printf("%c\n", buf[0]);
  2. if(buf == 'a')でなければなりませんif(buf[0] == 'a')。のアドレスbufをchar と比較していますが、配列'a'の最初の (一意の) セルの内容を比較したいと考えています。buf
于 2016-03-24T16:11:41.953 に答える
1

bufアドレスを含むポインタです。というわけでコンディション

if(buf=='a')

になりfalseifブロックに入りません。
使ってみて

if(*buf=='a')またif(buf[0]=='a')

于 2016-03-24T16:14:14.177 に答える