С-спринт изменяет мой счетчик
Я работаю над заданием для 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 ответ
Решение
Благодаря комментариям я получил ошибку:
Я забыл рассмотреть правильную длину переменной 'filename', и при запуске sprintf я превышал разрешенную для этого память