导致分段错误的“fread”功能

时间:2016-07-04 20:05:02

标签: c

int main(int argc, char* argv[])
{
// opens the memory 
FILE* inptr = fopen("card.raw", "r");
if(inptr == NULL)
{
    // checks for the availability of the file
    printf("Couldn't open card.raw\n");
    return 1;
}
char title[7];
int i = 0;
bool start = false;
BYTE* block = malloc(sizeof(BYTE) * 512);
while(fread(block, sizeof(BYTE), 512, inptr) == 512)
{
    if(fsign(block) && !start)
    {
        sprintf(title,"%.3d.jpg" , i);
        i++;
        FILE* image = fopen(title, "w");
        fwrite(block, sizeof(BYTE), 512, image);
        fclose(image);
    }
    else if(!fsign(block) && start)
    {
        FILE* image = fopen(title, "a");
        fwrite(block, sizeof(BYTE), 512, image);
        fclose(image);
    }

}
fclose(inptr);
free(block);
}

bool fsign(BYTE* block)
{
    if(*(block) == 0xff)
    {
        if(*(block + 1) == 0xd8)
        {
            if(*(block + 2) == 0xff)
            {
                if(*(block + 3) >= 0xe0 && *(block + 3) <= 0xef)
                { 
                     return true;
                }  
            }

        }

    }

return false;

所以我的问题是在while循环中。 while循环成功迭代3次,fread函数每次迭代三次成功读取文件;但是,在第三次迭代中,fread会导致分段错误。为什么会这样?

1 个答案:

答案 0 :(得分:1)

sprintf(title,“%。3d.jpg”,i);将字符串值XXX.jpg放入标题缓冲区,长度为7个字节。

然而,sprintf null终止字符串,因此需要和额外的buyte来存储空字节。