gpt4 book ai didi

在 C 中初始化未知值字符串的正确方法

转载 作者:太空宇宙 更新时间:2023-11-04 06:29:04 28 4
gpt4 key购买 nike

假设我想创建一个字符串,它将保存一些基于另一个字符串的值。基本上,我希望能够像这样压缩一个字符串:aaabb -> a3b2 - 但我的问题是:

在 Java 中你可以这样做:

String mystr = "";
String original = "aaabb";

char last = original.charAt(0);
for (int i = 1; i < original.length(); i++) {
// Some code not relevant
mystr += last + "" + count; // Here is my doubt.
}

如您所见,我们已经初始化了一个空字符串,我们可以对其进行修改 (mystr += last + ""+ count;)。你怎么能在 C 中做到这一点?

最佳答案

不幸的是,在 C 中你不能像在 Java 中那样简单:字符串内存需要动态分配。

这里有三种常见的选择:

  1. 尽可能多地分配,然后在完成后调整大小 - 这很常见,但由于错误计算最大值时可能会导致缓冲区溢出,因此也存在风险
  2. 运行你的算法两次 - 第一次计算长度,第二次填充数据 - 如果时间由内存分配决定,这可能是最有效的方法:这种方法需要你只分配一次,并且你分配了精确的内存量。
  3. 随时分配 - 从一个短字符串开始,然后在需要更多内存时使用realloc

我建议使用第二种方法。在您的情况下,您将遍历源字符串一次以计算压缩长度(在您的情况下,负载 “a3b2” 有 5 个字符,一个用于空终止符。有了这个手头的信息,您分配五个字节,然后将分配的缓冲区用于输出,保证适合。

关于在 C 中初始化未知值字符串的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22751228/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com