首页 文章

在fprintf中发出传递参数

提问于
浏览
-1

警告:从不兼容的指针类型警告传递'fprintf'的参数2:格式不是字符串文字而没有格式参数stdio.h:333:注意:期望'const char * restrict'但参数类型为'struct FILE *'

#include <stdio.h>

    int main (void){
    FILE *file;
    unsigned char *buffer;
    unsigned long fileLen;

    //Open file
    file = fopen("squirrel-gray.jpg", "rb");
    if (!file)
    {
            fprintf(stderr, "Unable to open file %s", "squirrel_gray.jpg");
            return;
    }

    //Get file length
    fseek(file, 0, SEEK_END);
    fileLen=ftell(file);
    fseek(file, 0, SEEK_SET);

    //Allocate memory
    buffer=(char *)(fileLen);
    if (!buffer)
    {
            fprintf(stderr, "Memory error!");
                            fclose(file);
       }
    fclose(file);

    FILE *image;
    image = fopen("img.jpg", "w");
    fprintf(image, file);
    fclose(image);

}

1 回答

  • 4

    这条线:

    fprintf( image, file ) ;
    

    fileFILE* 而不是格式字符串 . 编译器警告意味着它所说的内容(并且是语义错误) .

    大概是你打算把 buffer 的内容写成img.jpg?既然如此:

    • 你还没有将任何数据读入缓冲区,

    • 你没有分配任何内存来缓冲,

    • 格式化的I / O完全不适合在任何情况下编写二进制文件 .

    也许:

    //Allocate memory
    buffer = malloc( fileLen ) ;
    if( buffer == NULL )
    {
        fprintf( stderr, "Memory error!" ) ;
    }
    else
    {
        // Read data from file
        fread( buffer, 1, fileLen, file ) ;
    
        // Write data to image (img.jpg)
        FILE* image = fopen( "img.jpg", "wb" ) ;
        if( image != NULL )
        {
            fwrite( buffer, 1, fileLen, image ) ;
            fclose( image ) ;
        }
    }
    fclose( file ) ;
    

相关问题