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'。那么解决这个问题的最好方法是什么?不知道这是否是一个简单的问题,但我一直无法用不同的方法来解决这个问题。
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, ..
来工作。
您需要使用 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);