使用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。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
单片机,即单片微控制器,也称为单片微型计算机,是将中央处理器(CPU)、存储器(ROM,RAM)、输入/输出接口和其他功能部件集成在一块 在一个小块的集成电路上,从而实现对整个电路或系统的数字式控制。单片机不是完成某一个逻辑功能的芯片,而是...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询