char* tabA[N] oznacza: tablice 'tabA' posiadająca N elementow typu 'char*'
zapis "lamaakota" oznacza wartosc typu "char *"
zapis: tabA[0] = "mama" oznacza:
elementowi zerowy tablicy tabA, nadaj wartosc zgodna z "mama"
element tablicy to char*, prawa strona to char*, wiec wpisanie jest "wpisaniem wprost".
moze inaczej powiem.. "mama" nie jest lancuchem znakow. napis "mama" tworzy lancuch znakow gdzies w pamieci, a nastepnie zwraca wskanzik na pierwszy element. Twoja tablica przechowuje wskazniki. W efekcie, "mama" daje sie wstawic ot tak do tablicy, ale NIE OZNACZA TO zadnego kopiowania zadnego napisu. jedyne co jest skopiowane i wpisane i przechowywane w tablicy to ADRES tegoz napisu.
czy to Ci wyjasnia problem z *, czy potrzebujesz to rozpisane bardziej, z przykladami i wyjasnieniami roznych konfiguracji */& i opisem co jest wskanzikiem na co?
a co do kodu..
tabB[i] = (char*)malloc(len);
if (strlen(tabA[i])<len) tabB[i] = NULL;
alokujesz w ciemno, potem nullujesz. kazdy wynullowany powoduje zgubienie zaalokowanego kawalka pamieci. wtopa.
memcpy(tabB+i, tabA+i, sizeof(char)*len); //sizeof(char)*len zdaje się być ignorowane
gwarantuję Ci, że memcpy nie ignoruje żadnego z parametrow.
Twoj blad polega na przeoczeniu lub niezrozumieniu operacji na wskaznikach i tablicach, lub skladni ich zapisu.
ta linia powinna wygladac tak:
memcpy(tabB[i], tabA[i], sizeof(char)*len);
a jesli juz szalenie sie upierasz przy stosowaniu "przesuwania wskaznikow" to jest to rownowazne z:
memcpy( *(tabB + i), *(tabA + i), sizeof(char)*len);
Twoj zapis "tab+i" powodowal, ze memcpy zapisywal DO TABLICY tabA, w konkretne miejsce wyznaczone ADRESEM KOMORKI i-tej, a nie DO BUFORA ktorego adres powinien byc wziety z komorki i-tej.
Twoj kod mial w zamiarze wziać z szafki, z i-tej szuflady, jakies tam LEN skarpetek, a nastepnie wrzucic te LEN skarpetek do i-tej szuflady w komódce stojacej obok. Jednak tak jak napisales, okazało się że Twoj kod zamiast tego bierze LEN szuflad z szafki (liczac od i-tej szuflady) po czym umieszcza te szuflady w komódce (poczawszy od i-tego miejsca) wywalajac dotychczas istniejace w komodce szufladki za okno.