K
hier scheint ja einige verwirrung zu herrschen
zuerst einmal ist das array, das du benutzt nicht zweidimensional sondern ein eindimensionales char*-array. zweitens, und das scheint für dich das größte problem zu sein, du willst das array in addChar() reallozieren und anschließend irgendwie aus der fünktion zurückgeben. und drittens hast du dich beim reallozieren des arrays gewaltig verhaspelt.
ich poste erst mal den korrekten code und anschließend versuche ich zu erklären, warum er so aussehen muß.
int addChar(int arrows,int length,char ***ar,char *string)
{
*ar=(char**)realloc(*ar,((arrows+1)*sizeof(char*)));
(*ar)[arrows+1]=(char*)malloc(length+1);
strncpy((*ar)[arrows+1],string,length);
(*ar)[arrows+1][length]='\0';
return arrows+1;
}
erstmal willst du ein eindimensionales array von char* erstellen. das ist vom typ char**. außerdem willst du das array in addChar() reallozieren und wieder zurückgeben. dazu mußt du einen zeiger auf das array übergeben. und ein zeiger auf einen wert vom typ char** ist vom typ char***
wenn du auf einen string in einem array vom typ char** zugreifen willst, dann geht das per array[i]. da dein parameter aber ein zeiger auf ein char** ist, mußt du ihn erst dereferenzieren, um an dein array zu kommen. also (*array)[i]. *array[i] geht nicht. das wäre dasselbe wie *(array[i]), da der []-operator stärker bindet als der *-operator. was bei *(array[i]) rauskäme, das überlasse ich dir als denksportaufgabe.
außerdem hast du vergessen, ein abschließendes null-byte anzuhängen. das macht strncpy() nämlich nicht automatisch.