0

この関数は、ファイルから行列を読み取り、それを画面に出力します。fscanf(fp, "%u", &elem);しかし、ライブラリがfpからファイルを読み取るときに何か問題があります。

uint8_t elemに変更しても大丈夫ですuint8_t *elem

理由を知りたい!プログラムがFILEポインタをライブラリに転送するときに注意すべき点。どうも!

主な機能:

int main(int argc, char *argv[]){

    Matrix8g mat;
    FILE *fp;

    if((fp = fopen("mat.dat","r")) == NULL){
        printf("can't open the file");
    }
    //matrix with 24 rows and 11 cols
    mat.Make_from_file(fp, 24, 11);

    //print the matrix
    mat.Print();
    fclose(fp);
}

ライブラリファイルの一部(Make_from_file):

/* Set the matrix from a file */
int Matrix8g::Make_from_file(FILE *fp, int rows, int cols){
    int i, j;
    uint8_t elem;

    this->rr = rows;
    this->cc = cols;
    Resize_matrix();

    try{
        for(i = 0; i < rows; i++){
            for(j = 0; j < cols; j++){
                fscanf(fp, "%u", &elem);
                Set(i, j, elem);
            }
        }
    }catch(...){
        NOTE("Error when set the matrix from a file");
        return 0;
    }
    return 1;
}
4

1 に答える 1

-1

このリファレンスを見るとcリファレンス

fscanfには、抽出された日付が書き込まれるデータ構造への参照が必要であることがわかります。fscanfは、指定されたファイル/ストリームから指定されたポインターにコピーします。データのタイプに関する情報はありません。フォーマット文字列を使用して、入力からのバイトを解釈します。型キャストに似ています。fscanfは、ターゲット構造としてどのタイプが必要かを知ることはできませんが、ポインターを使用すると、直接コピー操作が可能になります。

于 2012-09-25T14:13:40.123 に答える