使用 strcat 在单个字符串中复制 n 个单词

Copy n words in a single string using strcat

如何使用 strcat 在单个字符串中复制 n 个不同的单词?这是我的代码,但不起作用。单个单词的大小是 40。arr 包含不同的单词,fin 是我的最终字符串。

char *cat(char **arr,int n){
    int i;
    char *fin;
    fin = malloc(n*40);
    for(i=0;i<n;i++){
        strcat(arr[i],fin);
    }
    return fin;
}

要连接来自 arr info fin 的字符串,您需要颠倒参数的顺序,因此替换

strcat(arr[i],fin);

来自

strcat(fin, arr[i]);

因为第一个参数是目标,第二个参数是源。

但是假设初始化 fin 为一个空字符串,所以在循环之前做

*fin = 0;

The size of the single words is 40

警告,如果您谈论的是长度而不是大小,包括终止空字符,您需要再分配一个:

fin = malloc(n*40 + 1);

根据您的评论:

Moreover it is all joined without space how can i add them between each word?

如果你想添加一个 space 你需要分配更多并明确添加你的 space,可以是:

fin = malloc(n*41+1);
*fin = 0;
for(i=0;i<n;i++){
    strcat(fin, arr[i]);
    strcat(fin, " ");
}

note if n large strcat search the end of fin which is more and more很长,最好将指针保存到末尾并使用 strcpy,例如:

char * fin = malloc(n*41+1);

if (n == 0) {
  *fin = 0;
}
else {
  char * p = fin;

  for(i=0;i<n;i++){
    strcpy(p, arr[i]);
    p += strlen(p) + 1;
    p[-1]  = ' ';
  }
  p[-1]  = 0;
}
return fin;