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

{急}用fread函式把檔案中的字串寫進陣列裡

我想要問一下要如何用fread把檔案中的每行的字串寫進陣列裡

例如檔案中有三行字串:

AAA

BBB

CCC

利用fread把每一行的字串寫入每個陣列中變成:

line[0] = AAA

line[1] = BBB

line[2] = CCC

最好能順便講解一下fread函式以及作法

已更新項目:

抱歉我沒說清楚

例子中雖然只有3行,每行3個item

但實際程式是要在未知的行數以及item下

每行item也可能不同

用fread寫入陣列Line裡

2 個已更新項目:

我看到的提示是這樣(有些基本不說):

FILE * pFile;

long lSize;

char * buffer;

fseek (pFile , 0 , SEEK_END);

lSize = ftell (pFile);

rewind (pFile);

buffer = (char*) malloc (lSize);

if (buffer == NULL) exit (2);

fread (buffer,1,lSize,pFile);

看是否能換成我想要的程式?

1 個解答

評分
  • 1 0 年前
    最佳解答

    讀檔案之前要先開檔

    FILE * f;

    char cLine[3][4]; //我習慣把變數的型態用在變數命名上,容易看出變數型態,就是你的line

    short nReadBytes; //真正讀出的Bytes

    f= fopen( "fread.out", "r" ); //Open File ,"r" --only read

    nReadBytes = fread( &(cLine[0]), sizeof (char), 3, f); // sizeof (char)表示每個item的Bytes, 3表示幾個items

    nReadBytes = fread( &(cLine[1]), sizeof (char), 3, f);

    nReadBytes = fread( &(cLine[2]), sizeof (char), 3, f);

    fclose ( f); //讀完要close

    2006-10-15 23:44:30 補充:

    通常我會加上判斷 , 看檔案在嗎?if( (f= fopen( "fread.out", "r" )) != NULL ) { //Read ... fclose( f); }

    2006-10-18 09:53:55 補充:

    int fseek( FILE *stream, long offset, int origin );

    2006-10-18 09:54:51 補充:

    SEEK_CUR Current position of file pointer

    SEEK_END End of file

    SEEK_SET Beginning of file

    2006-10-18 09:57:36 補充:

    ftell returns the current file position.

    2006-10-18 10:02:26 補充:

    然後一次讀出來, 但是檔案可能很大,通常我的做法會ALLOCATE一塊固定大小的記憶體,每次讀進一段,

    nReadBytes = fread(lpBuffer, sizeof (char), nSize, f);直到

    nReadBytes < nSize,表示讀到最後了!!

    2006-10-18 10:09:02 補充:

    然後要把資料拆開來,就看你每筆中間要放什麼當分隔,

    for (i = 0, j = 0, k = 0; i < nReadBytes; i ++)

    {

    ch = * (nReadBytes ++);

    if (ch == CH_SEPARATE)

    {

    cLine[j][k] = 0;

    j ++;

    k = 0;

    }

    else

    {

    cLine[j][k] = ch;

    k ++;

    }

    }

    2006-10-18 10:10:29 補充:

    不曉得這樣是不是符合你所需要的!!

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