Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c语言中读取jpeg文件时遇到问题_C - Fatal编程技术网

在c语言中读取jpeg文件时遇到问题

在c语言中读取jpeg文件时遇到问题,c,C,我目前正忙于准备一个jpeg文件。看起来我很接近了,但不管出于什么原因,该文件没有读取jpeg文件的不同签名。当然,我不确定我是否做了错事或笨拙的事情。以下是我目前拥有的代码: int main (void) { typedef unsigned char BYTE ; char image_name[8]; int counter=1; FILE* fp = fopen("card.raw", "r"); FILE *outfile=NULL;

我目前正忙于准备一个jpeg文件。看起来我很接近了,但不管出于什么原因,该文件没有读取jpeg文件的不同签名。当然,我不确定我是否做了错事或笨拙的事情。以下是我目前拥有的代码:

int main (void)
{
    typedef unsigned char BYTE ;
    char image_name[8]; 
    int counter=1;
    FILE* fp = fopen("card.raw", "r");
    FILE *outfile=NULL;
    int size=512;
    BYTE buffer[size];
    while (feof(fp) == false) 
    {
        fread(buffer,size,sizeof(unsigned char),fp);
        if (fp== NULL)
        {
            printf("Could not open file \n");
            return 1;
        }
        if(buffer[0]==255 && buffer[1]== && || buffer[2]==255 && (buffer [3]==224 && buffer[3]==225))
        {  
            for(int i=0; i<51; ++i){        
                sprintf(image_name, "%.3d.jpg", counter);        
                outfile= fopen(image_name, "w");
                fwrite(buffer,sizeof(buffer),1,outfile); 
                counter=counter+1;
                if (outfile == NULL)              
                {                   
                    printf("could not create jpeg file\n");                   
                    return 2;              
                }      
            } 
        }
        fclose(fp);
        fclose(&outfile);
        return 0;
    }
int main(无效)
{
typedef无符号字符字节;
字符图像_名称[8];
int计数器=1;
FILE*fp=fopen(“card.raw”,“r”);
FILE*outfile=NULL;
int size=512;
字节缓冲区[大小];
while(feof(fp)=false)
{
fread(缓冲区,大小,sizeof(无符号字符),fp);
如果(fp==NULL)
{
printf(“无法打开文件\n”);
返回1;
}
如果(缓冲区[0]==255&&buffer[1]=&&&&&&| |缓冲区[2]==255&&buffer[3]==224&&buffer[3]==225))
{  
对于(int i=0;i您可以在文本模式下打开文件,但应在二进制模式下打开:

打开进行写作时也是如此


您还可以只读取单个字符,然后选中多个:

/* This reads a single byte (`sizeof(unsigned char)` == 1) */
fread(buffer,size,sizeof(unsigned char),fp);

/* Here you check multiple bytes in the buffer,
 * even though you only have read a single byte
 */
if(buffer[0]==255 && buffer[1]== && || buffer[2]==255 && (buffer [3]==224 && buffer[3]==225))
还要注意的是,表达式
buffer[3]==224&&buffer[3]==225
永远不可能为真。

if(buffer[0]==255&&buffer[1]=&&&&&&124;
的语法不正确

缓冲区[1]==
之后应该有一些值,而不是
&


这是帖子中的打字错误吗?

对不起,我帮不了你什么忙,但你提到这是一项“作业”。如果是作业,我会加上“作业”tag,很多人在这些部分周围都会变形。祝你好运!@Chris:不。请阅读家庭作业标记wiki。不要使用该标记。我建议你不要共享一项作业的全部代码,只共享你怀疑的特定部分。我不会打赌这是问题所在-任何符合POSIX的系统,包括Linux和OS十、 将所有文件视为二进制文件,并忽略“b”flag。我相信这只会在Windows上引起问题。@Mattpanteaude好吧,OP没有指定平台,但像这样的错误通常是因为在Windows上使用了错误的模式。我这样做了,但仍然没有。似乎问题不在于我的代码,而在于文件?我被告知文件没有损坏,是合法的。@user2014904您只读取了一个字节,但检查了多个。请查看我的更新答案。它是一种类型。我相信它应该是缓冲区[1]==224。
/* This reads a single byte (`sizeof(unsigned char)` == 1) */
fread(buffer,size,sizeof(unsigned char),fp);

/* Here you check multiple bytes in the buffer,
 * even though you only have read a single byte
 */
if(buffer[0]==255 && buffer[1]== && || buffer[2]==255 && (buffer [3]==224 && buffer[3]==225))