如何在不越过缓冲区的情况下将字符串复制到 C 中的 char 数组中

新手上路,请多包涵

我想将一个字符串复制到一个 char 数组中,而不是超出缓冲区。

因此,如果我有一个大小为 5 的 char 数组,那么我想从一个字符串中复制最多 5 个字节到其中。

这样做的代码是什么?

原文由 neuromancer 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 564
2 个回答

首先, strncpy 几乎肯定 不是 你想要的。 strncpy 是为一个相当具体的目的而设计的。它在标准库中几乎完全是因为它已经存在,而不是因为它通常很有用。

做你想做的最简单的方法可能是:

 sprintf(buffer, "%.4s", your_string.c_str());

strncpy 不同,这保证了结果将被 NUL 终止,但如果源比指定的短,则不会在目标中填充额外的数据(尽管当目标长度时后者不是主要问题是 5)。

原文由 Jerry Coffin 发布,翻译遵循 CC BY-SA 3.0 许可协议

最受欢迎的答案很好,但空终止不是通用的。空终止字符缓冲区的通用方法是:

 std::string aString = "foo";
const size_t BUF_LEN = 5;
char buf[BUF_LEN];
size_t len = aString.copy(buf, BUF_LEN-1); // leave one char for the null-termination
buf[len] = '\0';

len 是复制的字符数,因此它介于 0BUF_LEN-1 之间。

原文由 Zeppe 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题