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

如何使用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;
}
iCMS 回答:使用strcat在单个字符串中复制n个单词

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

strcat(arr[i],fin);

作者

strcat(fin,arr[i]);

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

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

*fin = 0;

每个单词的大小为40

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

fin = malloc(n*40 + 1);

根据您的评论:

此外,所有这些都没有空间,如何在每个单词之间添加它们?

如果要添加空间,则需要分配更多空间并显式添加空间,可以是:

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

请注意,如果 n 大的 strcat 搜索越来越长的 fin 的末尾,则最好将指针保存到末尾并使用 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;
本文链接:https://www.f2er.com/1713428.html

大家都在问