Cześć. Napisałem taki krótki program dla poćwiczenia. Funkcja dostaje napis, jej zadaniem jest zamiana każdego napotkanego A na BB. Jak działa to chyba widoczne: jeżeli napotka jakieś A, to kopiuje tablicę do tymczasowej, powiększa tablicę i wypełnia ją.
void funkcja (char*tab, int rozmiar) {
int i,k;
char*tmp;
for (k=0; tab[k]!='\0'; k++)
if (tab[k]=='A') {
tmp = malloc( (rozmiar) * sizeof *tab );
for (i=0; i<rozmiar-1; i++) {
tmp[i]=tab[i];
}
tab = malloc( (rozmiar+1) * sizeof *tab );
for (i=0; i<rozmiar-2; i++) {
if (i<k)
tab[i]=tmp[i];
else
tab[i+2]=tmp[i+1];
}
free (tmp);
tab[k]='B';
tab[k+1]='B';
rozmiar=rozmiar+1;
k=k+1;
}
}
int main() {
int i;
char napis[] = "BACAC";
funkcja(napis, 6);
for (i=0; napis[i]!='\0'; i++)
printf("%c", napis[i]);
EXIT_SUCCESS;
}
No i jeżeli wyświetlam tablicę w main, to jest ona w niezmodyfikowanej wersji, a jeżeli wyświetlam ją w funkcji to jest ok. Problemem jest malloc, który alokuje pamięć tylko w obrębie funkcji. Czy jest jakiś sposób, żeby malloc użyty w funkcji zadziałał na tablicę w całym programie? Będę bardzo wdzięczny za pomoc :)