如何从结构数组中获取所有元素,并将它们添加到 c 中的字符串中?
How do I get all elements from a struct array, and add them into a string in c?
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。那么解决这个问题的最佳方法是什么?不确定这是否是一个简单的问题,但我只是无法使用不同的方法来破解它。
char str[vector_total(&final_clause)];
太小了。
size_t len = vector_total(&final_clause);
char str[len*2 + 1]; // might be enough
//only prints -c (last )
代码将 vector_get()
复制到同一位置,因此这是预期的。
也许使用 strcat()
和 str[0] = 0;
让第一个 strcat(str, ..
起作用。
您需要使用 strcat
而不是 strcpy
。 strcpy
当strcat
连接str
和vector_get()
时,用vector_get()
的结果替换str
的内容。
这应该可以解决您的问题:
char str[vector_total(&final_clause)];
char *result = NULL;
str[vector_total(&final_clause)] = '[=10=];
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 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。那么解决这个问题的最佳方法是什么?不确定这是否是一个简单的问题,但我只是无法使用不同的方法来破解它。
char str[vector_total(&final_clause)];
太小了。
size_t len = vector_total(&final_clause);
char str[len*2 + 1]; // might be enough
//only prints -c (last )
代码将 vector_get()
复制到同一位置,因此这是预期的。
也许使用 strcat()
和 str[0] = 0;
让第一个 strcat(str, ..
起作用。
您需要使用 strcat
而不是 strcpy
。 strcpy
当strcat
连接str
和vector_get()
时,用vector_get()
的结果替换str
的内容。
这应该可以解决您的问题:
char str[vector_total(&final_clause)];
char *result = NULL;
str[vector_total(&final_clause)] = '[=10=];
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);