C 语言中如何优雅地拼接多段字符串? |
您所在的位置:网站首页 › strcat出错 › C 语言中如何优雅地拼接多段字符串? |
因为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 |