常用函数
常用函数
1. clamp 方法
// 若X在[low,high]范围内,则等于X;如果X小于low,则返回low;如果X大于high,则返回high
clamp(x, low, high)
2. double 转成 float(C++ 风格的显式类型转换)
double d = 3.141592653589793;
float f = static_cast<float>(d);
3. strcpy_s (C++ 中用于安全地复制字符串的函数,是 strcpy 的更安全的替代品)
strcpy_s 的主要作用是防止缓冲区溢出,通过要求指定目标缓冲区的大小,从而避免复制操作导致的缓冲区溢出。
其函数原型如下:
errno_t strcpy_s(char* dest, rsize_t dest_size, const char* src);
- dest: 目标字符串的缓冲区,必须有足够的空间来存储源字符串
- dest_size:目标缓冲区的大小(以字符为单位,包括 '\0')
- src: 要复制的源字符串
使用步骤:
- 确保目标缓冲区的大小足够大,能够容纳源字符串以及结尾的空字符 \0。
- 提供目标缓冲区的大小作为第二个参数
- 该函数在 目标缓冲区的大小不足时会返回错误,并且不会进行任何复制操作
示例代码:
#include <iostream>
#include <cstring>
int main() {
char src[] = "Hello, World!";
char dest[20]; // 目标缓冲区大小为 20
// 使用 strcpy_s 进行安全的字符串复制
errno_t result = strcpy_s(dest, sizeof(dest), src);
// 检查是否复制成功
if (result == 0) {
std::cout << "Copy successful: " << dest << std::endl;
} else {
std::cout << "Copy failed, error code: " << result << std::endl;
}
return 0;
}
strcpy_s 的特点:
- 安全性增强:如果目标缓冲区大小不够,它会返回错误,而不是导致缓冲区溢出。
- 返回值:函数的返回值为 errno_t,表示是否成功。返回 0 表示成功,返回非 0 值表示错误。
- 更严格的边界检查:通过显式传递缓冲区的大小来避免溢出。
注意事项:
strcpy_s 是 C11 和 C++ 标准库中定义的安全函数,但并非所有编译器都默认支持,尤其是一些旧版本的编译器可能只支持 strcpy。