我如何从一个结构数组中获取所有元素,并在c中把它们添加到一个字符串中?

问题描述 投票:0回答:1
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'。那么解决这个问题的最好方法是什么?不知道这是否是一个简单的问题,但我一直无法用不同的方法来解决这个问题。

c arrays strcpy
1个回答
0
投票

char str[vector_total(&final_clause)]; 太小了,所以只能打印-c (&final_lause); for(int i = 0; i太小了。

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, .. 来工作。


0
投票

您需要使用 strcat 而不是 strcpy. strcpy 取而代之的是 str 结果 vector_get()strcat 连缀 strvector_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); 
© www.soinside.com 2019 - 2024. All rights reserved.