我正在使用CS50中的PSET 4,并且似乎有一个sprintf更改无关变量的问题。我只给出了不能揭示我解决方案的代码......
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
typedef uint8_t BYTE;
int counter = 0;
int main(int argc, char *argv[])
{
char *ifilename = argv[1];
//open file in read only
FILE *file = fopen(ifilename, "r");
BYTE buffer[512];
int bsize = fread(&buffer, 512, 1, file);
printf("BSIZE IS %d\n", bsize);
char ofilename[7];
printf("BSIZE IS %d\n", bsize);
sprintf(ofilename, "%03i.jpg", counter);
printf("BSIZE IS %d\n", bsize);
FILE *img = fopen(ofilename, "w");
... 正如你在最后几行看到的那样,我正在试图弄清楚我的bsize发生了什么...... 我运行程序时的输出如下:
BSIZE IS 1
BSIZE IS 1
BSIZE IS 0
问题的原因是什么?
答案 0 :(得分:3)
char ofilename[7];
太短,当你sprintf(
它会弄乱邻近的价值观时。
在Linux系统上,最大可能长度为MAX_PATH
,可能很长(4096个字符)。