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 超出允许的内存时
我正在为 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 超出允许的内存时