【发布时间】:2010-11-18 15:42:17
【问题描述】:
我有简单的测试程序
#include <stdio.h>
int main( int argc , char* argv[] )
{
unsigned int number=2048;
char* cpOut;
char cOut[4];
cpOut=(char*)&cOut[0];
printf("cOut address= %x \n",&cOut[0]);
printf("cpOut address = %x \n",cpOut);
sprintf(&cOut[0],"%d \n", number);
printf("cOut address= %x \n",&cOut[0]);
printf("cpOut address = %x \n",cpOut);
};
在 Linux、gcc 4.3.4 上测试运行:
user@server /tmp $ ./a.out
cOut address= f9f41880
cpOut address = f9f41880
cOut address= f9f41880
cpOut address = f9f41880
在 Solaris 10、Sun C++ 5.10 上测试运行:
bash-3.00$ ./a.out
cOut address= 8047488
cpOut address = 8047488
cOut address= 8047488
cpOut address = 8000a20
谁能解释一下为什么指针 cpOut 被调用 sprintf 函数覆盖?
【问题讨论】: