C++ 库收到文件指针并读取文件时出错

C++ 库收到文件指针并读取文件时出错,c++,file,shared-libraries,C++,File,Shared Libraries,该函数从文件中读取矩阵,并将其打印在屏幕上。但是,当库fscanf(fp、%u、&elem)出现错误时从fp读取文件 当我将uint8\u t元素更改为uint8\u t*元素时,它是正常的 我想知道为什么!程序将文件指针传输到库时应注意的事项。谢谢 主要功能: int main(int argc, char *argv[]){ Matrix8g mat; FILE *fp; if((fp = fopen("mat.dat","r")) == NULL){

该函数从文件中读取矩阵,并将其打印在屏幕上。但是,当库fscanf(fp、%u、&elem)出现错误时从fp读取文件

当我将
uint8\u t元素
更改为
uint8\u t*元素
时,它是正常的

我想知道为什么!程序将文件指针传输到库时应注意的事项。谢谢

主要功能:

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);
}
库文件的一部分(从库文件生成库):

/*从文件中设置矩阵*/
int Matrix8g::从_文件生成_(文件*fp,int行,int列){
int i,j;
uint8元素;
这->rr=行;
这->cc=cols;
调整_矩阵()的大小;
试一试{
对于(i=0;i
如果您查看此参考资料


您将看到,fscanf需要一个对提取的日期应该写入的数据结构的引用。fscanf从给定的文件/流复制到给定的指针。它没有关于数据类型的信息。它使用格式字符串来解释输入中的字节。它类似于类型铸造。fscanf无法知道目标结构需要哪种类型,但指针允许直接复制操作。

是的,我误用了fscanf,我将
uint8_t elem
更改为
unsigned int elem
,现在一切正常。
/* 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;
}