0

まず第一に、これが私のコードの関連部分であり、説明に進みます。

scanf("%d", &option);
    fflush (stdin);

    //Insert
    if(option==1){

        printf("enter name\n");
        fgets(name,MAX_SIZE,stdin);
        printf("name: %s",name);

        char str[]="alpha one";
        fd=open(argv[1],O_RDWR|O_CREAT|O_TRUNC,S_IRWXU);
        write(fd,str,strlen(str) + 1);

        pcounter = updateCounter(pcounter, str);

        lseek(fd, 0, SEEK_END);

        char passpos[5];
        sprintf(passpos,"%d",pcounter); //int to string
        fd=open(argv[2],O_RDWR|O_CREAT|O_TRUNC,S_IRWXU);
        write(fd,passpos,3);
    }

str を「アルファ 1」として再定義する理由は、fflush を使用して scanf の後にバッファーをクリアしようとしても、fgets が入力として「/n」を取得し (私が推測する)、「名前」を出力すると、空白になります。主な問題ではありませんが、これに関するヘルプは貴重です。

これはすべてループしているので、プロンプトが表示されたら「1」を押し続けると、バイナリファイルは次のようになるはずだと思いました: alpha onealpha one alpha one ...

ただし、次のように表示されます: アルファ 1、1 を何回押しても。

カウンターを格納する他のバイナリ ファイルと同じことです。正しく更新されるため、最初のループの後には "9" が格納されますが、2 番目のループの後は "18" だけが期待されます: 9 18

lseek を完全に削除し、END ではなく CURR に設定しようとしました。同じ結果です。最大警告をオンにしましたが、コンパイル時に何も表示されません。

これは宿題なので、fopen などは使用できず、システム コマンドしか使用できないことを指摘しておく必要があります。

誰かが実行したい場合の updateCounter 関数は次のとおりです。

int updateCounter(int pcounter, char *str){
int m,charcount = 0;
for(m=0; str[m]; m++) {
        charcount ++;
}
printf("chars: %d \n", charcount);

pcounter = pcounter + charcount;
printf("pcounter = %d \n", pcounter);

return pcounter;
}

助けてくれてありがとう。

4

1 に答える 1