Как мне получить все элементы из массива struct и добавить их в строку в c? - PullRequest
1 голос
/ 02 мая 2020
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' everyl oop. Так что это лучший способ исправить это? Не уверен, что это простой вопрос, но мне просто не удалось взломать его, используя разные подходы.

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

Вам нужно использовать strcat вместо strcpy. strcpy замените содержимое str на результат vector_get(), когда strcat объединит str и 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); 
0 голосов
/ 02 мая 2020

char str[vector_total(&final_clause)]; слишком маленький.

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

// только печать - c (последний)

Копирование кода vector_get() в то же место так что это ожидается.

Возможно, используйте strcat() и str[0] = 0; для первых strcat(str, .. для работы.

...