vsprintf和vsnprintf使用测试

结论

vsprintf不会对字符进行截断,可能越界,造成运行时错误;

vsnprintf会对字符进行截断,并返回字符的实际长度;其存储上限是bufSize - 1;

vsprintf

#include <stdio.h>
#include <iostream>

using namespace std;

constexpr uint32_t DEFAULT_BUF_SIZE = 16;
char buf[DEFAULT_BUF_SIZE];

void PrintTest(const char *fmt, ...){
    va_list(args);
    va_start(args, fmt);
    uint32_t msgLen = vsprintf(buf, fmt, args);
    va_end(args);

    cout << "Len : " << msgLen << endl;
}

int main(){
    PrintTest("Hello World, xxxxxxxx");
    cout << buf << endl;
    return 0;
}

Output:

/Users/admin/WorkPlace/CodeSnippet/cmake-build-debug/CodeSnippet
Len : 21
Hello World, xxxxxxxx

Process finished with exit code 0

vsnprintf

#include <stdio.h>
#include <iostream>

using namespace std;

constexpr uint32_t DEFAULT_BUF_SIZE = 16;
char buf[DEFAULT_BUF_SIZE];

void PrintTest(const char *fmt, ...){
    va_list(args);
    va_start(args, fmt);
    uint32_t msgLen = vsnprintf(buf, DEFAULT_BUF_SIZE, fmt, args);
    va_end(args);

    cout << "Len : " << msgLen << endl;
}

int main(){
    PrintTest("Hello World, xxxxxxxx");
    cout << buf << endl;
    return 0;
}

Output:

/Users/admin/WorkPlace/CodeSnippet/cmake-build-debug/CodeSnippet
Len : 21
Hello World, xx

Process finished with exit code 0
posted @   Coputing  阅读(624)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示