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;
}
但是第一次运行,程序变这样了
到第二次运行直接出错了
好乱,想了一天都写不出来...求大神指导!要详细讲解的.. 展开
我写的代码是这样的:
#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;
}
但是第一次运行,程序变这样了
到第二次运行直接出错了
好乱,想了一天都写不出来...求大神指导!要详细讲解的.. 展开
2个回答
展开全部
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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询