Erick 發問時間: 電腦與網際網路程式設計 · 1 0 年前

急!_如何 fopen->strtok篩選字->fwrite

小弟位這個問題困擾很久了

如何開啟一個檔案 fopen (組合語言asm檔)

去掉其中的逗號(,)分號(;)

然後輸出fwrite

另外如何去讀某ㄧ行

我的c code如下,但是輸出檔案不正確

#include <stdio.h>

#include <string.h>

void main(){

FILE *fp,*da;

char buf[512],*pp,del_word[]=\",\";

fp = fopen(\"data.asm\",\"r\");//開檔

da = fopen(\"i_memory.txt\",\"w\");//寫檔

while(!feof(fp))

{

int i=fread(buf,1,512,fp);

pp=strtok(buf,del_word);

fwrite(pp,1,i,da);//丟資料

}

fclose(fp);

fclose(da);

}

可以糾正一下嗎??

另外,之後若是要讀某ㄧ行如何讀??

已更新項目:

另外問一個問題,C如何讀入組合語言檔案並且執行,然後將register和memory的值輸出,程式要怎麼寫

我的程式無法正常工作,我另外開一個新視窗,贈點20點

希望好心人士幫忙解答

1 個解答

評分
  • 無憂
    Lv 4
    1 0 年前
    最佳解答

    1.糾正你的問題

    當你使用了strtok之後,你的字串大小就被改變了,所以後面再使用fwrite的時候就會產生奇怪的現象。如何解決下面的程式碼有改給你看。

    2.若是要讀某ㄧ行如何讀??

    C裡面好像沒有專讀哪一行的函數,不過我們可以自己判斷。使用換行符號('\n')跟一個記數器變數來判斷現在在第幾行。

    int main(){

    FILE *fp,*da;

    int i;

    char buf[512],*pp,del_word[3]=",;";//可同時有兩個要刪除的符號

    fp = fopen("data.asm","rt");//開檔

    da = fopen("i_memory.txt","wt");//寫檔

    while(!feof(fp))

    {

    i=fread(buf,1,512-1,fp);//由於使用 strtok的字串必須為Null-terminated

    buf[i]='\0';

    pp=strtok(buf,del_word);

    i=strlen(pp);//由於使用了strtok,字串大小已經改變

    while(i>0)//如果還有資料要丟

    {

    i=fwrite(pp,1,i,da);//丟資料

    pp=strtok(NULL,del_word);//找下一個

    if(pp!=NULL)

    i=strlen(pp);

    else

    i=0;

    }

    }

    fclose(fp);

    fclose(da);

    return 0;

    }

還有問題?馬上發問,尋求解答。