Я пытался реализовать простую функцию, которая может объединять любое количество передаваемых ей строк.Мой звонок на Realloc не удается.Это как-то связано с тем фактом, что строковые аргументы, которые я передаю функции, хранятся в сегменте данных, где realloc ищет выделение памяти из кучи?Это просто идея, которая у меня есть.Я новичок, поэтому извините, если это кажется глупым.Как я могу заставить эту функцию работать?
//Program to implement a function that can concatenate any number of argumnets
#include<stdio.h>
#include<stdarg.h>
#include<string.h>
#include<stdlib.h>
char *mstrcat(char *first, ...);
int main(int argc, int **argv){
char *s;
s=mstrcat("I ","Love ","Stack","Overflow");
printf("%s\n",s);
}
char *mstrcat(char *first, ...){
char *s=first,*p;
int len=0; // stores the length of the string as it grows
len=strlen(s);
va_list aptr; // creates a pointer to the unnamed argument list
va_start(aptr,first); // initialise aptr to the first unnamed argument
if(aptr==NULL){
return s;
}
while((p=va_arg(aptr,char *))!=NULL){ // till there are no more arguments to process
len+=strlen(p);
if((s=(char *)realloc(s,len+1))!=NULL){
strcat(s,p);
}
else{
printf("Failed to concatenate\n");
return first;
}
}
return s;
}