gpt4 book ai didi

c - 奇怪的 sprintf 副作用?

转载 作者:太空宇宙 更新时间:2023-11-04 06:51:58 27 4
gpt4 key购买 nike

我在 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

问题的原因是什么?

最佳答案

char ofilename[7];

太短了,当你 sprintf( 它会弄乱相邻的值。

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

关于c - 奇怪的 sprintf 副作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49961494/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com