首页 > 解决方案 > 使用 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;
}

标签: cdynamic-memory-allocationstrcat

解决方案


要连接来自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, " ");
}

请注意,如果nstrcat搜索越来越长的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;

推荐阅读