【问题标题】:Appending and clearing a string in C在 C 中追加和清除字符串
【发布时间】:2014-03-07 03:07:41
【问题描述】:

我想不断地向 char* 添加一个 char(我认为这是在 C 中保存字符串的最佳方法),然后,经过一定数量的循环,我希望能够清除 char*并再次重复该过程。如何将 char 添加到我的 char* 中?

【问题讨论】:

  • 如果str是你的数组,i是你数组中'\0'终结符的索引,c是你要追加的字符,正常的方式是str[i++] = c; ,假设缓冲区中有足够的空间。要重新开始,只需将 i 重置为 0

标签: c string append


【解决方案1】:

如果您有一定数量的字符,那么您可以使用 malloc 通过以下语法分配该数量:

char *str = malloc(number_of_chars);

然后您可以通过迭代分配的金额来添加您的字符,如下所示:

for (int i = 0; i < number_of_chars; i++)
{
    *(str + i) = ...; //the source of your chars is unspecified
}

如果你想清除你的str,你可以像这样使用函数free

free(str);

希望这对您有所帮助。

【讨论】:

    【解决方案2】:

    您需要了解 C 中固有的 strcat(和其他)字符串函数。

    例如:

    char x[10];
    strcpy(x,"Compiler");
    strcat(x,":");
    

    您还必须了解 C 如何处理以空字符结尾的字符串。

    【讨论】:

      【解决方案3】:

      只要有足够的空间,你可以简单地使用strcat,例如

      char *s = malloc(100);
      strcpy(s, "Hello");
      strcat(s, ",");
      strcat(s, " ");
      strcat(s, "w");
      

      另一种方法是维护最后一个字符的索引并直接访问字符

      char *s = malloc(100);
      int len;
      strcpy(s, "Hello");
      len = strlen(s);
      s[len++] = ',';
      s[len++] = '\0';
      s[len++] = ' ';
      s[len++] = '\0';
      s[len++] = 'w';
      s[len++] = '\0';
      

      如果字符串的容量用完了,你必须realloc内存为更多字符腾出空间

      s = realloc(s, 200);
      

      【讨论】:

      • 当我说 char *s = malloc(100); 时,这是否会为 100 个不同字符的内存空间腾出空间?
      • 是也不是,它为 100 个字节腾出空间。但是您必须考虑到尾随的 0 字节,因此您有 99 个字符的空间。
      • 如果我还想在我的 char* 中的 char 旁边添加一个数字怎么办?
      • 您可以使用相同的技术添加任何字符,甚至是数字。
      【解决方案4】:

      在 C 中,必须为字符串分配内存。如果你想要一个可变长度的字符串,你需要随着它的大小不断增长,反复为它重新分配内存,除非你事先知道它会有多大。

      如果您知道字符串永远不会超过某个大小,您可以使用char *my_str = (char*)malloc(BUFF_SIZE); 分配该大小的缓冲区,并使用my_str[position] = my_char; 添加每个字符。要重置字符串,请使用bzero(my_str, BUFF_SIZE);

      如果您的字符串可能具有无限长度,则每次缓冲区填满时,您都需要继续分配更多内存。分配一个更大的缓冲区后,您必须将旧缓冲区的内容复制进去(一旦创建缓冲区,您就无法更改它的大小。)

      【讨论】:

        猜你喜欢
        • 2011-08-24
        • 2020-09-03
        • 1970-01-01
        • 1970-01-01
        • 2016-07-31
        • 1970-01-01
        • 2014-08-02
        相关资源
        最近更新 更多