考虑这个例子。我在下面创建了一个本地范围缓冲区,可以存储 2 个字符和一个终止符。但是当我用 2 位数字(即 a = 20)越过该阈值时,当我调用 sprintf 时会发生一些奇怪的事情。a 被修改并打印出 0。如果我将 buff 大小从 3 更改为 4。变量 a 不会改变。这是什么令人沮丧的行为?我正在使用 clang 13.0.0 编译器。
int main(int argc, const char * argv[]) {
int a = 20;
{
char buff[3];
sprintf(buff, "a%d", a);
}
printf("value of a %d",a);
return 0;
}
谢谢。