常用函数

常用函数

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: 要复制的源字符串
    使用步骤:
  1. 确保目标缓冲区的大小足够大,能够容纳源字符串以及结尾的空字符 \0。
  2. 提供目标缓冲区的大小作为第二个参数
  3. 该函数在 目标缓冲区的大小不足时会返回错误,并且不会进行任何复制操作

示例代码:

#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 的特点:

  1. 安全性增强:如果目标缓冲区大小不够,它会返回错误,而不是导致缓冲区溢出。
  2. 返回值:函数的返回值为 errno_t,表示是否成功。返回 0 表示成功,返回非 0 值表示错误。
  3. 更严格的边界检查:通过显式传递缓冲区的大小来避免溢出。

注意事项:
strcpy_s 是 C11 和 C++ 标准库中定义的安全函数,但并非所有编译器都默认支持,尤其是一些旧版本的编译器可能只支持 strcpy。

posted @ 2024-08-10 00:29  爱新觉罗LQ  阅读(9)  评论(0编辑  收藏  举报