C通过‘的参数1;fread&x2019;从不带强制转换的整数生成指针

C通过‘的参数1;fread&x2019;从不带强制转换的整数生成指针,c,C,很抱歉打扰你,但我已经坚持太久了。 我在fread上得到了以下警告:“警告:传递'fread'的参数1将从整数生成指针,而不进行强制转换” 我是C新手,非常喜欢它,但别忘了这一点。 提前谢谢 typedef unsigned char byte; int main( int argc, char *argv[]){ FILE * filein; filein = fopen(argv[1], "r" ); int width=10

很抱歉打扰你,但我已经坚持太久了。 我在fread上得到了以下警告:“警告:传递'fread'的参数1将从整数生成指针,而不进行强制转换”
我是C新手,非常喜欢它,但别忘了这一点。
提前谢谢

    typedef unsigned char byte;

    int main( int argc, char *argv[]){
        FILE * filein;
        filein = fopen(argv[1], "r" );
        int width=10;
        int height=10;
        byte ** data;

        // Allocation
        data = (byte **) malloc(height*sizeof(byte *));
        for(int i=0;i<height;i++){
            data[i]=(byte *) malloc(width*sizeof(byte));
        }

        for(int i=0;i<height;i++){
            for(int j=0;j<width;j++){
                fread(data[i][j], sizeof(const char), 1, infile);
            }
        }

        for(int i=0;i<height;i++){
            free(data[i]);
        }
        free(data);
        fclose(filein);

        return 0;
        exit(0);
    }
typedef无符号字符字节;
int main(int argc,char*argv[]){
文件*filein;
filein=fopen(argv[1],“r”);
整数宽度=10;
整数高度=10;
字节**数据;
//分配
数据=(字节**)malloc(高度*尺寸(字节*);

对于(int i=0;i数据[i][j]的类型是字节。这不是指针。如果一次读取一个字节,您真正想要的是读取到&data[i][j]。

fread()需要指向缓冲区的void*指针。您传递的是存储在数据[i][j]中的值,而不是指向元素数据[i][j]的指针

尝试使用

fread(&data[i][j], sizeof(const char), 1, infile);

顺便说一句,.pgm文件格式()有一个标题,仅读取宽度*高度字符是不够的。像素值也用空格分隔,因此需要进行一些分析。还要记住,行尾符号也占用空间(.pgm在一行上不能有超过70个字符)要读取单个字符,您可以执行以下操作

int c; // not char, because it must be able to hold EOF
c = getc(infile);
if( c == EOF ){
   // do something about error or premature EOF
}
data[i][j] = c;

这更详细,主要是因为您的代码没有进行错误检查。

非常感谢。这很有帮助。头解析和其他一切都很有效。为了减少混淆,我只发布了与问题相关的代码部分,但还是谢谢您。