1

私は学校の課題に取り組んでいて、少し助けが必要です。

私の質問は、ファイルから読み込まれた文字を単一のメモリ文字列に構成するにはどうすればよいかということです。これが私がこれまでに持っているものです。

私のコード:

#include <stdio.h>
#include <stdlib.h>
char myString;

int main(int argc, char *argv[]){
    FILE* fin;
    char ch;

    fin=fopen(argv[1],"r");
    while((ch=fgetc(fin))!=EOF){
            printf("%c\n", ch);
    }
    fclose(fin);
    return 0;
}

私の先生は、メインの最後の部分は次のようになると言いました。

   putchar(‘\n’);    
   printf( myString );
   return 0;
}

しかし、それをコード内に配置する方法がわかりません。事前に感謝します。私はまた、私がそれを解決するのを手伝ってくれれば、答えが与えられることを望んでいません。もう一度ありがとう.

更新されたコード:

#include <stdio.h>
#include <stdlib.h>


int main(int argc, char *argv[]){
    FILE* fin;
    int i;
    char myString[3];

    fin=fopen(argv[1],"r");
    while(fgets(myString,sizeof(myString), fin)){

            putchar('\n');
            printf("%c\n", myString[i]);
    }
    fclose(fin);
    return 0;
}

このコードが正確に正しいかどうかはわかりません。ファイル内の項目を出力し、それらの間にスペースを入れます。文字列に使用されている配列があります。

4

4 に答える 4

4

私はまた、答えを与えられることを望んでいません

罰金。

  • 文字列を保持するのに十分な大きさのchar配列 ( )を定義しますmystring
  • 配列内の位置を追跡するカウンターを定義する
  • 各ステップchで配列に格納
  • 必ず 0 で終了してください (0最後の要素として保存してください)。

注意事項:

  • reallocプログラムが任意の長い入力を読み取る場合は、ストレージについて学習し、拡張する必要があります。それは後にとっておいたほうがいい
  • 一般に安全ではありませんprintf(dynamicstr)。が含まれている場合はどうなります"%d"か?したほうがいいprintf("%s", dynamicstr)です。
于 2011-11-25T19:56:55.120 に答える
0

Cでの「文字列」とは何かを説明している教科書の該当する部分を読む必要があります。それを理解しないと、質問に答える方法はほとんどありません。

charAC「文字列」は、 sを含む連続したメモリのチャンクであり、NULL終了します。それを割り当ててから、ファイルから文字を読み取るときに文字を配置する必要があります。その際、割り当てたメモリを超えないようにする必要があることに注意してください。これは「バッファオーバーフロー」と呼ばれます。

于 2011-11-25T20:02:39.683 に答える
0
#include <stdio.h>
#include <stdlib.h>

char* myString;
int main(int argc, char *argv[]){
    FILE* fin;
    fpos_t fsize = 0;
    char ch;
    char *pch;

    fin=fopen(argv[1],"r");
    fseek(fin,0,SEEK_END);
    fgetpos(fin, &fsize);
    rewind(fin);
    pch = myString = (char*)malloc((fsize+1)*sizeof(char));
    while((ch=fgetc(fin))!=EOF){
            *pch++ = (char)ch;
    }
    *pch = '\0';
    fclose(fin);
    printf("%s", myString);//printf(myString);// need escape %
    free(myString);
    return 0;
}
于 2011-11-26T04:53:08.307 に答える
0

memcpy と malloc について学ぶことができます。彼らはあなたの友達です。

--ジェイソン

于 2011-11-25T19:58:10.113 に答える