美文网首页程序员
用snprintf代替sprintf吧

用snprintf代替sprintf吧

作者: v一只熊v | 来源:发表于2018-04-10 10:31 被阅读0次

    sprintf最常用的功能莫过于将int,float等类型数据打印到char数组中去。但是使用sprintf常常会由于疏忽产生缓冲区溢出的问题,导致不可知的错误。
    snprintf是sprintf的安全版本,其函数原型为

    int _snprintf(char *buffer, size_t count, const char *format [,argument] ... );
    

    其第二个参数可以指定转换后字符串在缓冲区中的长度,确保不发生溢出。

    当然,有一个问题需要注意,指定的转换长度是包含结束符"\0"的字节数,例如,

    float a = 1.23;
    char buf[10];
    snprintf(buf,4,"%f",a);
    cout << buf;
    

    得到1.2,而要完整的转换a,则需要指定转换长度为5,

    float a = 1.23;
    char buf[10];
    snprintf(buf,5,"%f",a);
    cout << buf;
    

    相关文章

      网友评论

        本文标题:用snprintf代替sprintf吧

        本文链接:https://www.haomeiwen.com/subject/hosghftx.html