使用sprintf()函数的一个问题?

#include<stdio.h>#include<string.h>intmain(void){charbrray[4];sprintf(brray,"%30.3f",... #include <stdio.h>
#include <string.h>
int main(void)
{
char brray[4];
sprintf(brray,"%30.3f", 3.14);
printf("brray[]:%s\n", brray);

return 0;
}
输出结果:brray[]: 3.140
在使用时,栈内存越界了,但是去右对齐30,却可以通过。当取值为100时报错,*** stack smashing detected ***: ./a.out terminated
Aborted (core dumped)
展开
 我来答
小灬宝丶
2012-04-13 · TA获得超过349个赞
知道小有建树答主
回答量:235
采纳率:0%
帮助的人:159万
展开全部
首先说说sprintf函数吧,这个函数的功能是将某一个字符串放在目标字符串后面输出,可以理解成将两个字符串连接在一起输出。你写的程序内存越界是因为char brray[4];sprintf(brray,"%30.3f", 3.14);的问题,你定义了一个含有四个成员的字符数组,而你在数组后面接上的"%30.3f"格式的一个浮点型数据,这个数据占30位,有效位为小数点后三位,接上的这个数据时候的字符串会保存到数组中,30位的数据没有的部分会用空格补齐,空格也是个字符,所以越界了。你可以将数组的界限设大一点。
更多追问追答
追问
取30的时候不越界的,您再好好想想。
追答
不可能,30和100的效果是一样的,你定义的是char型的数组,你可以用strlen测一下,我试了,30时strlen结果是30,100时,strlen结果是100。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式