当前位置:  编程技术>c/c++/嵌入式

基于C++中sprintf的错误总结详解

    来源: 互联网  发布时间:2014-10-14

    本文导语:  sprintf 是个变参函数,使用时经常出问题,而且只要出问题通常就是能导致程序崩溃的内存访问错误。下面对sprintf 常出错误问题进行简单的总结:1、缓冲区溢出:第一个参数的长度太短了,解决办法:将第一个参数的长度扩...

sprintf 是个变参函数,使用时经常出问题,而且只要出问题通常就是能导致程序崩溃的内存访问错误。
下面对sprintf 常出错误问题进行简单的总结:

1、缓冲区溢出:第一个参数的长度太短了,解决办法:将第一个参数的长度扩大。打印字符串时,尽量使用”%.ns”的形式指定最大字符数
char buf[5];
sprintf(buf, ":%d", 3246);
printf("buf is %sn", buf);

将buf修改为char buf[6]

2、忘记第一个参数:原因用printf 用得用习惯了,偶尔会忘记
char buf[6];
sprintf(":%d", 3246);
printf("buf is %sn", buf);

错误提示: error C2664: 'sprintf' : cannot convert parameter 2 from 'int' to 'const char *'

3、变参对应出问题:通常是忘记了提供对应某个格式符的变参,导致以后的参数统统错位,检查检查吧。尤其是对应”*”的那些参数,都提供了吗?
不要把一个整数对应一个”%s”

char buf[100];
int a=6;
sprintf(buf, ":%d,%s", 3246,a);
printf("buf is %sn", buf);

温馨提示:a对应的应该是%d而不是%s
 
4、还有下面这种错误,我只能意会不知道怎么来描述。现在给出错误的代码和正确的代码的例子。大家自己看吧~~
错误的代码
char buf[15];
char a1[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
char a2[] = {'H', 'I', 'J', 'K', 'L', 'M', 'N'};
sprintf(buf, "%s%s", a1, a2); //出现乱码,得出的结果并非我们所需要的
printf("buf is %sn", buf);

正确的代码
char buf[15];
char a1[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
char a2[] = {'H', 'I', 'J', 'K', 'L', 'M', 'N'};
sprintf(buf, "%.7s%.7s", a1, a2);//产生:"ABCDEFGHIJKLMN"
printf("buf is %sn", buf);

    
 
 

您可能感兴趣的文章:

  • C++中sprintf()函数的使用详解
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 我的sprintf有错误,不知道什么问题。
  • sprintf函数的第一参数字符缓冲区为何分配空间不够,在linux运行也不出现内存错误?
  • 写内核模块时有没有类似sprintf这样的方法
  • 程序判斷type與sprintf問題
  • 深入分析C中不安全的sprintf与strcpy
  • 一个sprintf函数问题
  • sprintf()函数问题?谢谢
  • sprintf的问题
  • 函数sprintf,大家熟悉吗?
  • 如何在JAVA中实现类似VC中sprintf的功能
  • sprintf如何格式化64位的无符号整数
  • php sprintf函数用法 php浮点数格式
  • php的sprintf函数的用法 控制浮点数格式
  • Java有没有C中的sprintf之类的函数?
  • uclibc 9.27下的C问题(关于long,unsigned long,以及sprintf的问题)
  • 请教有关 fork 和 sprintf 函数的问题
  • 关于GTK表格控件中sprintf函数的一个问题
  • php中sprintf与printf函数用法区别解析
  • 十进制转换为二进制,sprintf函数怎么不好使呢,高手看看
  • 浅析C语言中printf(),sprintf(),scanf(),sscanf()的用法和区别
  • 基于C语言sprintf函数的深入理解


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3