【问题标题】:Building very long repetitive string in C在 C 中构建非常长的重复字符串
【发布时间】:2014-10-30 19:37:38
【问题描述】:

假设我要生成一个很长的、重复的字符串,比如

"foo bar bar bar bar ... bar"

bar 在最终结果中出现 1000 次。在没有内存泄漏的情况下,最简单的方法是什么?

【问题讨论】:

  • 石膏,用很多石膏。
  • malloc 如果未能分配请求的内存,将返回一个空指针,因此您可以简单地尝试分配所需的内存,看看操作系统是否允许。
  • 内存泄漏与此有何关系?
  • @mafso 天真的方法可能涉及大量复制,这可能导致内存泄漏。
  • @JoshuaTaylor,我不确定这是否是 Koz 的想法(如果这就是重点,几乎所有关于如何在 C 中完成某事的问题都可能包含“没有内存泄漏”这句话)。我不确定是否真的在问其他问题(并且错误地使用了内存泄漏一词)。有些语言有很短的习语可以做到这一点,所以人们可能想要寻找这个,这个问题可能很有用。但它需要改进和澄清。

标签: c string


【解决方案1】:

我首先想到的是:

char *string = malloc(4004);
int i;
strcpy(string, "foo");
for(i = 0; i < 1000; i++)
    strcat(string, " bar");

【讨论】:

  • 这会很慢,因为strcat() 在循环中隐含了strlen()。将其替换为strcpy(string + 3 + 3 * i, "bar")
  • @LeeDanielCrocker;复杂性!=速度。但除此之外,我同意。
  • @LeeDanielCrocker 令人印象深刻。感谢您的建议。我知道它很慢。我只是想让他知道他是如何做到的。有很多可能的方法。
  • Joel Spolsky 讨论了这个问题:Back to Basics。另见C: What is the best and fastest way to concatenate strings
猜你喜欢
  • 2020-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-06
  • 1970-01-01
  • 1970-01-01
  • 2015-04-25
相关资源
最近更新 更多