c 的 sprintf 改变了我的计数器

c's sprintf altering my counter

我正在为 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 变为一个很大的奇怪数字后。

对问题出在哪里以及如何解决有什么建议吗?

感谢评论,我得到了错误:

我忘了考虑 'filename' 变量的正确长度,当 运行 sprintf 超出允许的内存时