c语言:我定义一个char a[1]数组,然后sprintf(a,"02x",155);输出a数组为9b,我的疑问是
我定义的字符数组是一个长度,按道理只能存一个字符,但用sprintf后存到里面的是“9b”,这不是两个字符吗?为什么还能正常存储和显示呢?...
我定义的字符数组是一个长度,按道理只能存一个字符,但用sprintf后存到里面的是“9b”,这不是两个字符吗?为什么还能正常存储和显示呢?
展开
2个回答
展开全部
你的问题在于你觉得空间不对是吧,sprintf这个函数的第一个参数是一个char *,你传对了函数就会执行,就会将后边参数决定的内容写进那个地址,有多大就往后边存,不会检查大小,你这个操作已经改写了未知的内存中存储的值。。。另外%x这个参数选项就是将数据转换为小写十六进制,十进制的155等于十六进制的9b
追问
int i=155;
char a[1];
sprintf(a,"%02x",i);
printf("a=%c\n",a[1]);
printf("changdu=%d\n",sizeof(a));
那为什么我用sizeof输出数组占得内存字节数还是1呢?不是改写了未知的内存中存储的值吗?应该是2吗?难道我sizeof(a)看的是char *这个指针的内存字节?
追答
那个未知内存不受这个数组管理的,正因为你控制的变量访问不到那个地方,所以才叫未知内存啊,sizeof仍然计算的是这个数组的字节数,然而你更改的是数组的那个字节,加上和它相邻在它后边的那个字节。。。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询