С-спринт изменяет мой счетчик - PullRequest
0 голосов
/ 01 июля 2018

Я работаю над заданием для CS50, но у меня странное поведение переменной счетчика после запуска функции sprintf:

//recover jpg files from memory

#include <stdio.h>
#include <stdint.h>

typedef uint8_t  BYTE;

int main(int argc, char *argv[])
{
    // ensure proper usage
    if (argc != 2)
    {
        fprintf(stderr, "Please submit an input file\n");
        return 1;
    }

    // remember filename
    char *infile = argv[1];

    // open input file
    FILE *inptr = fopen(infile, "r");
    if (inptr == NULL)
    {
        fprintf(stderr, "Could not open %s.\n", infile);
        return 2;
    }

    // define the buffer as array of BYTEs
    BYTE buffer[512];

    // define the counter of images found
    int counter = 0;

    // declare the array for the filename
    char filename[3];

    while (fread(buffer, 512, 1, inptr)>0)
        {

        if (buffer[0] == 0xff &&
            buffer[1] == 0xd8 &&
            buffer[2] == 0xff &&
            (buffer[3] & 0xf0) == 0xe0)
        {
            sprintf(filename, "%03i.jpg", counter);
            printf("%c%c%c\n", filename[0],filename[1],filename[2]);
            counter++;
        }
    }
}

Я попробовал инструмент debug50 и увидел, что после запуска fprintf переменный счетчик переходит от 0 к большому странному числу.

Есть предложения о том, где проблема и как ее исправить?

1 Ответ

0 голосов
/ 01 июля 2018

Благодаря комментариям я получил ошибку:

Я забыл рассмотреть правильную длину переменной 'filename', и при запуске sprintf я превышал разрешенную для этого память

...