c - 使用 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;
}
解决方案
要连接来自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;
推荐阅读
- powerbi - PowerBI 矩阵的总和
- javascript - 为什么异步函数在等待已解决的承诺时返回?
- android - Xamarin Android FCM 令牌无效且未在 Firebase 推送通知中进行一些尝试后注册
- java - 尽管验证步骤正在工作,但 Maven 测试步骤失败
- ios - iOS -Textfield 的 shouldChangeCharactersIn 范围正在禁用 .editingChanged 的目标方法
- python - 无法从 environment.yml 创建 conda env
- r - 优化 R 代码以减少迭代时间
- javascript - SAPUI5 SelectDialog中的“全选/取消全选”
- javascript - SAPUI5 - 如何获取我的自定义控件已绑定到的模型的名称?
- nginx - 同一服务器实例上多个静态站点的 Nginx 配置