复制字符串时我需要注意什么?

时间:2011-11-21 17:03:28

标签: c string copy

在C中复制字符串时,我必须注意哪些因素?什么可能出错?

我可以想到我需要在复制字符串之前保留足够的内存,并且必须确保我有足够的权限写入内存(尽量避免一般保护错误),但还有什么我必须注意的在复制字符串时?还有其他潜在的错误吗?

4 个答案:

答案 0 :(得分:3)

  • 确保目标中有足够的缓冲区空间(即提前知道要复制的字节数)。这也意味着确保源字符串被正确终止(通过空字符,即0 = '\0')。
  • 确保目标字符串正确终止。
  • 如果您的应用程序可识别字符集,请记住某些字符集可以嵌入空字符,而有些字符集可以包含可变长度字符。

答案 1 :(得分:2)

C字符串通常是以零字节结尾的非零字节数组。处理它们的例程得到一个指向一个字节的指针(它指向从该字节开始的数组)。你应该注意保留的地方适合。了解strcpystrcat及其有界的对应部分strncpystrncat。也是关于strdup。并且不要忘记将终止字节清零(特别是在到达strncpy等边界时...)。一些库(例如来自GTK的Glib)提供了很好的实用功能(例如g_strdup_printf)构建字符串。

阅读我提到的所有功能的文档。

答案 2 :(得分:2)

你需要:

  1. 为目的地分配足够的内存(strlen(source)+ 1)

  2. 确保源不是NULL

  3. 处理unicode问题(字符串长度可能小于 字节)

答案 3 :(得分:1)

你必须注意C中字符串的定义:它们是以空终止字符('\ 0')结尾的字符序列。

string.h中的所有函数都将使用此假设。使用这些功能,你应该没事。