0

整数を含むファイルがあります。これらの整数をchar(ASCII番号)としてバッファに書き込みたい。それはより大きなプロジェクトの一部であるため、別の投稿はしないでください。しかし、それについて私を助けてください. 私が特に必要としているのは、char * 型のバッファーに格納される char です。

これらは私の宣言です。

FILE *in;
  long io_len = 1000;    
 char * buffer;
    in=fopen("input.txt","a+");

    buffer = malloc(io_len * sizeof(*buffer));
      if(buffer == NULL){
        perror("malloc");
        exit(EXIT_FAILURE);
        }

私は2つの解決策を考え出しています。

これを書くと:

read_ret = read(in, buffer, io_len);

ファイルから io_len バイトを読み取り、バッファに格納します。しかし、それは文字を読み取ります。たとえば、123 を書き込むと、ASCII 番号 123 の文字ではなく、バッファ 1,2,3 に書き込まれます。

だから私はこれをしました:

while((fscanf(in,"%d", &i))==1){
        printf(": %d\n", i);
    }

私が望むように整数を読み取ります。今、それらを文字としてバッファに格納する方法について少し混乱しています。これを試しましたが、セグメンテーション違反が発生します。

while((fscanf(in,"%d", &i))==1){
        printf(": %d\n", i);
    buffer=(char) i;
    printf("Character in Buffer:%s\n",buffer);
    buffer++;
    }

ファイルの後半でバッファを別の場所に書き込んでいることに注意してください。そのため、何をするにしても、ポインターをchar配列の先頭に置きたいと思います(私が言っていることが理にかなっている場合)

4

1 に答える 1

2

最終的なコードでは、少なくとも行内のポインターへの整数の割り当てに関する警告が表示されるはずですbuffer=(char) i;。ポインタを逆参照したいようです。

一度に 1 文字だけを印刷したい場合も、文字列を印刷しています。

コードはおそらく次のようになります。

int character_index = 0;
while((fscanf(in,"%d", &i))==1){
        printf(": %d\n", i);
    buffer[character_index]=(char) i;
    printf("Character in Buffer:%c\n",buffer[character_index]);
    character_index++;
}
于 2012-06-21T23:10:48.657 に答える