c语言 可变参数函数的问题

要求,编写这样一个的函数,即将可变数目的字符串作为参数,依次将这些字符串拼接成一个更长的字符串,并返回一个指向拼接成的字符串的指针我写的代码是这样的:#include<s... 要求,编写这样一个的函数,即将可变数目的字符串作为参数,依次将这些字符串拼接成一个更长的字符串,并返回一个指向拼接成的字符串的指针

我写的代码是这样的:
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
char *rc(int num,char *c,...);
int main(void){
char *x;
x=rc(3,"cxeg","rrrf","fefe");
printf("%s",x);
getch();
return 0;
}
char *rc(int num,char *c,...){
int i;
char *str=(char*)malloc(sizeof(char)*num);
va_list arg;
va_start(arg,num);
for (i=0;i<num;i++){
strcat(str,va_arg(arg,int));
}
va_end(arg);
return str;
}

但是第一次运行,程序变这样了

到第二次运行直接出错了

好乱,想了一天都写不出来...求大神指导!要详细讲解的..
展开
 我来答
xoaxa
2015-04-11 · TA获得超过8609个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3467万
展开全部

num是字符串个数,不能当作字符串长度使用。

需要先遍历字符数组,并累加各个字符串的长度得到的和,然后用这个和再开辟相应长度的空间。二次遍历各个字符数组,逐个拷贝到目标地址即可。

#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <stdlib.h>

char *rc(int num,char *c,...);

int main(void) {
char *x;
x = rc(3,"cxeg","rrrf","fefe");
printf("%s\n",x);
// getch();
return 0;
}

char *rc(int num,char *c,...) {
int i,len = 0;
char *str;
va_list arg;
va_start(arg,num);
for (i = 0; i < num;i++)
len += strlen(va_arg(arg,char *));
str = (char *)malloc(sizeof(char) * (len + 1));
str[0] = 0;
va_start(arg,num);
for(i = 0; i < num; ++i)
strcat(str,va_arg(arg,char *));
va_end(arg);
return str;
}
fastfs
2015-04-11 · TA获得超过1423个赞
知道大有可为答主
回答量:2659
采纳率:62%
帮助的人:799万
展开全部
我觉得函数声明成这样 char * rc(int num, ...)就行了,用strlen+计算一下每个字符串的大小然后相加再加1,这就是malloc分配内存的大小,不要忘了在字符串结尾加0。malloc(sizeof(char)*num)这个分配得太小了,才3字节。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式