acl/lib_acl_cpp/include/acl_cpp/stdlib/snprintf.hpp

38 lines
1.4 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include "../acl_cpp_define.hpp"
#include <stdarg.h>
namespace acl {
/**
* 标准 C snprintf API 封装,可以保证结果缓冲区中的最后一个字节为 '\0'
* @param buf {char*} 存储结果的缓冲区
* @param size {size_t} buf 缓冲区长度
* @param fmt {const char*} 变参格式字符串
* @return {int} 当缓冲区长度够用时返回实际拷贝的数据长度,否则:
* 1) UNIX/LINUX 平台下返回实际需要的缓冲区长度,即当缓冲区长度不够时返回值
* >= size需要注意该返回值的含义与 _WIN32 下的不同
* 2) _WIN32 平台下返回 -1
*/
#if defined(__GNUC__) && (__GNUC__ > 4 ||(__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
ACL_CPP_API int ACL_CPP_PRINTF(3, 4) safe_snprintf(char *buf, size_t size,
const char *fmt, ...);
#else
ACL_CPP_API int safe_snprintf(char *buf, size_t size, const char *fmt, ...);
#endif
/**
* 标准 C snprintf API 封装,可以保证结果缓冲区中的最后一个字节为 '\0'
* @param buf {char*} 存储结果的缓冲区
* @param size {size_t} buf 缓冲区长度
* @param fmt {const char*} 变参格式字符串
* @param ap {va_list} 变参变量
* @return {int} 当缓冲区长度够用时返回实际拷贝的数据长度,否则:
* 1) UNIX/LINUX 平台下返回实际需要的缓冲区长度,即当缓冲区长度不够时返回值
* >= size需要注意该返回值的含义与 _WIN32 下的不同
* 2) _WIN32 平台下返回 -1
*/
ACL_CPP_API int safe_vsnprintf(char *buf, size_t size, const char *fmt, va_list ap);
} // namespace acl