奇怪的sprintf副作用?

时间:2018-04-22 00:46:01

标签: c cs50

我正在使用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

问题的原因是什么?

1 个答案:

答案 0 :(得分:3)

char ofilename[7];

太短,当你sprintf(它会弄乱邻近的价值观时。

在Linux系统上,最大可能长度为MAX_PATH,可能很长(4096个字符)。