这是我的代码的一部分
int pic_num = 1;
printf("pic_num = %i\n", pic_num);
sprintf(picture, "%03d.jpg", pic_num);
printf("%s, pic_num = %i\n", picture, pic_num);'
Run Code Online (Sandbox Code Playgroud)
pic_num的第一个值是1,但是第二个值,在sprintf之后是6778986为什么?sprintf实际上做了什么?我以为它只是制作一个字符串图片= 001.jpg但是pic_num怎么样?为什么它会改变一个值?
谢谢
你们都是怀疑的.它应该是[8]或[16].谢谢你们.
该值6778986给出了0x0067706A十六进制的,这对应于最后3个ASCII字符和空终止("jpg"什么本来应该在)picture的字符串.
这表示您picture之前定义的pic_num只有4个字节.我猜你把它定义为:
char picture[4];
Run Code Online (Sandbox Code Playgroud)
您需要正确调整字符串的大小以容纳至少8个字符(但可能更多取决于pic_num值可以获得的大小),因此写入其中的内容sprintf不会溢出pic_num.例如 :
char picture[16];
Run Code Online (Sandbox Code Playgroud)
有关内容的更多信息sprintf,请参阅此参考文献,例如.:http://en.cppreference.com/w/c/io/fprintf