Witam napisałem taki kod
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
char * sklej(int n, ...)
{
va_list lista;
va_start (lista,n);
int dlugosc=0,i;
for(i=0;i<n;i++)
{
dlugosc+=strlen(va_arg(lista, char*));
}
dlugosc++;
printf("dlugosc: %d\n", dlugosc);
va_end(lista);
char * lancuszek;
lancuszek=(char*)malloc(dlugosc*sizeof(char));
if(lancuszek==NULL)
{
printf("blad przydzielenia pamieci\n");
return NULL;
}
va_start (lista,n);
int j=0,k=0;
char * argument;
for(i=0;i<n;i++)
{
argument=va_arg(lista, char*);
for(j;j<dlugosc;j++)
{
*(lancuszek+j)=*(argument+k);
if(*(argument+k)=='\0')
{
k=0;
break;
}
else
{
k++;
}
}
}
va_end(lista);
*(lancuszek+dlugosc)='\0';
return lancuszek;
}
int main(int argc, char *argv[])
{
char * test;
if((test=sklej(3, "janusz", " pali ", "koty"))==NULL)
{
printf("blad");
}
else
{
printf("%s", test);
}
free(test);
return 0;
}
Mam problem z zapewnieniem obsługi błędów, ponieważ nie wiem na co się powołać jeżeli do funkcji przekażemy mniej argumentów niż zadeklarowano, tzn. podajemy, że przekazujemy 4 argumenty a w rzeczywistości są tylko 3. Starałem się poszukać jakichś informacji co stanie się gdy funkcji va_arg zabraknie argumentów do wczytania ale dowiedziałem się, że będzie zwracać losowe błędy. W rzeczywistości objawia się to losowymi znakami gdy program odwołuje się do pamięci do której nie zostało nic przypisane.
- W jaki sposób mogę w funkcji sprawdzić czy liczba przekazanych argumentów zgadza się z tą zadeklarowaną?
- Co zrobić by te łańcuchy znaków mógł wprowadzić użytkownik z poziomu konsoli, tzn. wiem jak miałbym je wczytać ale jak przekazać je za jednym razem do funkcji sklej w takiej postaci jak jest teraz?
Sorry za mało profesjonalne wysławianie się ale nie mam jeszcze za wielkiego doświadczenia :). Z góry dziękuje za wszelkie sugestie.