C 语言中如何优雅地拼接多段字符串?

您所在的位置:网站首页 strcat出错 C 语言中如何优雅地拼接多段字符串?

C 语言中如何优雅地拼接多段字符串?

2023-03-10 03:51| 来源: 网络整理| 查看: 265

因为strcpy(dest, src)和strcat(dest, src)都返回dest,题目的4个语句可写成:

strcat(strcat(strcat(strcpy(dest, TEST1), ip), TEST2), port);

但这并不高效,最坏情况是O(n^2),为什么?另外会有缓冲溢出风险。可考虑非标准[1]的strlcpy() 和strlcat()。

另外可以用sprintf()或C99中更安全的snprintf():

int n = snprintf(dest, sizeof(dest), "%s%s%s%s", TEST1, ip, TEST2, port); assert(n = sizeof(dest)) { // 只对 snprintf() 有效 // dest的空间不足 }

如果能直接列出n个字符串一次性地做串接,最坏情况是O(n)的。不过分析format需要一些额外开销。

在C++中用std::ostringstream会简单一点,不过性能也不是最优。

这个回答不给出一个理想方案,看看之后是否想到怎么补充吧。

参考文献

[1] Miller, Todd C., and Theo De Raadt. "strlcpy and strlcat-consistent, safe, string copy and concatenation." USENIX Annual Technical Conference, FREENIX Track. 1999.

http://static.usenix.org/event/usenix99/full_papers/millert/millert.pdf


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3