【问题标题】:How do I get all elements from a struct array, and add them into a string in c?如何从结构数组中获取所有元素,并将它们添加到 c 中的字符串中?
【发布时间】:2020-08-16 21:46:35
【问题描述】:
char str[vector_total(&final_clause)];
    for(int i = 0; i<vector_total(&final_clause); i++)
    {
          printf("%s  ", (char*) vector_get(&final_clause,i)); // outputs b  a  -c  a  a  -c  -c
          strcpy(str, (char*) vector_get(&final_clause,i));
    } 
    printf("%s", str); //only prints -c (last )
    remove_repeatation(str); // removes repeats. Expected: b a-c

显然它取代了'str'everyloop。那么解决这个问题的最佳方法是什么?不确定这是否是一个简单的问题,但我无法使用不同的方法破解它。

【问题讨论】:

标签: c arrays strcpy


【解决方案1】:

char str[vector_total(&amp;final_clause)]; 太小了。

size_t len = vector_total(&final_clause);
char str[len*2 + 1]; // might be enough

//只打印 -c (last)

代码将vector_get() 复制到同一位置,因此这是意料之中的。

也许使用strcat()str[0] = 0; 让第一个strcat(str, .. 工作。

【讨论】:

  • 感谢一堆工作得很好。一开始我不确定str[0] = 0 做了什么,但它似乎在一开始就清理了一些随机字符。
  • @thome.steve 第一次调用strcat(str, ...)str 需要为空字符串。这是通过str[0] = 0; 完成的。
【解决方案2】:

您需要使用strcat 而不是strcpy。当strcat 连接strvector_get() 时,strcpystr 的内容替换为vector_get() 的结果。

这应该可以解决您的问题:

char str[vector_total(&final_clause)];
char *result = NULL;
str[vector_total(&final_clause)] = '\0;
    for(int i = 0; i<vector_total(&final_clause); i++)
    {
          printf("%s  ", (char*) vector_get(&final_clause,i)); // outputs b  a  -c  a  a  -c  -c
          result = realloc(result, (sizeof(char) * strlen(vector_get(&final_clause,i));
          result = strcat(result, (char*) vector_get(&final_clause,i));
    } 
    printf("%s", str);
    remove_repeatation(str); 

【讨论】:

  • 需要 char *result == NULL; 以便以后 realloc() 工作。 realloc() 不分配空字符 - 1 太小。首先strcat(str, ... 是一个问题,因为str 不是字符串。 (没有\0)。分配丢失 result = strcat...
  • 您好,感谢您的帮助。第一个版本似乎还可以,并且与 chux 的一些调整完美配合 - Reinstate Monica 提到了。str[vector_total(&amp;final_clause)] = NULL;,我不确定这条线的功能。
  • @thome.steve 我在输入这一行时出错了,它通常是一个 '\0' 来表示字符串的结尾。
猜你喜欢
  • 1970-01-01
  • 2019-06-08
  • 2020-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-10
  • 1970-01-01
相关资源
最近更新 更多