c++ - C/C++ 中的安全字符串复制

标签 c++ c string

我为 C 字符串编写了这个字符串复制例程。它应该表现得像 strlcpy,即 - 如果大小 > 0,则 null 终止目标,并返回源字符串的长度。

但是我也希望函数在源指针或目标指针为空时失败,并以某种方式将此通知给调用者。但我想不出一种非常优雅的方法来做到这一点。现在我发送两个负值作为大小来表示源指针或目标指针指向 null。因此我将返回类型从 size_t 更改为有符号整数,我对这个接口(interface)不满意。什么是更好的界面?

  #include <cstddef> // size_t
  #include <cstdint> // 32 bit int

  const std::int32_t SRC_NULL = -1;
  const std::int32_t DST_NULL = -2;

  std::int32_t CopyStringn (char *dest, const char *src, std::size_t size) {
     const char* temp (src);
     if (temp == NULL)
         return SRC_NULL;
     if (dest == NULL)
         return DST_NULL;
     while (*temp) {
        if (size > 1) {
           *dest++ = *temp;
           --size;
        }
        ++temp;
     }

     if (size)
         *dest = '\0';

     return static_cast<std::int32_t> (temp - src); // Length does not include null
}

最佳答案

在 C++ 中,您可以抛出异常。

关于c++ - C/C++ 中的安全字符串复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5240162/

相关文章:

c++ - 在另一个线程未定义行为的破坏调用期间调用对象上的方法吗?

windows - CoInternet IsFeatureEnabled 在 Delphi 2010 中

c++ - 哪个是迭代字符串排列的最佳数据结构?

c - GCC 的 __attribute__((__packed__)) 是否保留原始顺序?

python - 使用字典计算字符串中的第一个字母 - Python

c - 结构指针中的字符串数组

c++ - 从 Visual Studio 中间窗口调用方法 nlohmann::json::dump

c - 如何解析 xml 日期和时间并将其转换为秒

c - 并行运行线程不可靠的行为

java - 这是在 java 中为字符串 append 单引号的最佳方法