Zgaduję, że chcesz połączyć ciągi. Jeśli tak, tak. Musisz wiedzieć, ile miejsca chcesz, zanim go przydzielisz.
W rzeczywistości można użyć realloc
, ale tak naprawdę wystarczy skopiować poprzedni ciąg za każdym razem i znacznie mniej skutecznie.
Niektóre kod: (zakładając char *s[]
i int n
)
int i,l=1;
for (i=0;i<n;i++) l+=strlen(s[i]);
char *r=malloc(l);
r[0]=0;
for (i=0;i<n;i++) strcat(r,s[i]);
Edycja: W niektórych komentarzach, strcat
jest nieskuteczna, gdy znasz długość. (. I nadal wolą ponieważ przydzielić pamięci w jednym czasie) Niektóre bardziej efektywny kod jest:
int i,l=1;
for (i=0;i<n;i++) l+=strlen(s[i]);
char *r=malloc(l);
char *d=r;
for (i=0;i<n;i++) {
srtcpy(d,s[i]);
d+=strlen(s[i]);
}
Kod pomoże nam zrozumieć, o co pytasz. – user7116
Wygląda na to, że chcesz skopiować tablicę ciągów C. Czy to prawda? – vitaut
Chcę w końcu połączyć ciągi w tablicy w jeden ciąg znaków. Należy wiedzieć, ile miejsca pamięci należy przeznaczyć na docelowy ciąg znaków. Nie wiem, w jaki sposób wiesz, co umieścić jako warunek kończący w pętli for, tj. Jaka jest długość tablicy. –