问题描述
如何使用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;
每个单词的大小为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;