0
#include<stdio.h>

int main(){

 unsigned char array[]={0xff,0xd8,0xff,0xe0};
 char names[7];
 int count=1;
  sprintf(names,"%03d.jpg",count);
  for(int i=0;i<4;i++){
   printf("%#x  ",array[i]);
  }
  printf("\n");
 return 0;
}

字符数组受 sprintf 的返回值影响,此处为 7。我使用 gdb 找到了这个错误。
如何摆脱这个问题以及
知道 sprintf 行执行后发生了什么。###

output should be : 0xff 0xd8 0xff 0xe0
but Output I got is : 0 0xd8 0xff 0xe0
4

2 回答 2

0
sprintf(names, "%03d.jpg", count);

将字符串存储在"001.jpg"names,正如您在 . 之后打印它会发现的那样sprintf。由于 NUL 字符,该字符串需要 8 个字节来存储,而不是 7 个,因此您有未定义的行为。在这种特定情况下,NUL 被写入内存array[0]中恰好相邻的位置。names

于 2013-09-19T07:56:56.663 回答
0

您有一个缓冲区溢出,它正在破坏内存。

该字符串"001.jpg"需要 8 个字符(请记住 0 终止符),但您的names数组只有 7 个字符。第 8 个字符会覆盖 的部分array,导致未定义的行为。

做它char names[32]什么的。

于 2013-09-19T07:57:19.623 回答