使用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) 展开
#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) 展开
1个回答
展开全部
首先说说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。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询