c语言:我定义一个char a[1]数组,然后sprintf(a,"02x",155);输出a数组为9b,我的疑问是

我定义的字符数组是一个长度,按道理只能存一个字符,但用sprintf后存到里面的是“9b”,这不是两个字符吗?为什么还能正常存储和显示呢?... 我定义的字符数组是一个长度,按道理只能存一个字符,但用sprintf后存到里面的是“9b”,这不是两个字符吗?为什么还能正常存储和显示呢? 展开
 我来答
如此甚好118
2015-11-20 · TA获得超过116个赞
知道小有建树答主
回答量:92
采纳率:0%
帮助的人:81.6万
展开全部
你的问题在于你觉得空间不对是吧,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仍然计算的是这个数组的字节数,然而你更改的是数组的那个字节,加上和它相邻在它后边的那个字节。。。
jzh雨晴
2015-11-20
知道答主
回答量:27
采纳率:0%
帮助的人:12万
展开全部
9b是16进制的ascii码,换算成10进制就是155
追问
十六进制的ascll码是什么意思?
int main()
{
int i=155;
char a[1];
sprintf(a,"%02x",i);
printf("a=%c\n",a[1]);

return 0;
}
为什么我分别输出a数组的元素,a[0]=9,a[1]=b,数组a[1]长度是1,应该只有一个元素a[0],为什么还能输出a[1]?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式