Operacja na tablicy przez przekazanie do argumentu

0

Piszę sobie odpowiednik STRCAT. Jednak nie potrafię operować na przekazanej tablicy tak, by zmieniła się "na zewnątrz" a nie w funkcji.

Myślę że jak pokaże wam kod to będziecie wiedzieli o co chodzi.

int Size(char tab[])
{
short int index= 0;
	while ( tab[index] != '\0' ) // badanie warunku końca tablicy
		index++; // inkrementacja
return index; // zwracanie długości
}
void Bind(char *tab1, char tab2[])
{
short int index1= Size(tab1),
         index2= 0;
	while( tab2[index2] != '\0' ) // badanie warunku końca tablicy
		tab1[++index1]= tab2[index2++]; // dodanie do 1-szej tablicy zawartość 2-giej tablicy.
}
int Main()
{
	char
		tab1[20]="aaa";
	char
		tab2[10]="ccc";
		Bind(tab1, tab2);
}

Po wywołaniu funkcji Bind tablica tab1 nie zmieniła się.
Proszę o wskazówki, pomoc.

0

Cos takiego mniej wiecej ja bym dal:

void strcate(char *t1, char *t2)
{
        while(*t1 != '\0') *t1++;  /* idzie na koniec t1 */
        while((*t1++ = *t2++) != '\0'); /* dopisuje druga tablice na koniec pierwszej*/
}
0

Co do Twojego to pewnie wypisujesz za pomoca printf("%s");, wiec konczy Ci wypisywac jak trafi na '\0', mozliwe, ze kopiujesz za zero pierwsze, wiec sie calosc nie wyswietla, bo jak najbardziej dopisujesz druga tablice do pierwszej ;)

tab1[++index1]= tab2[index2++]; // pierwszy index bym odwrotnie inkrementowal(preinkrementacja, czy jakos tak, w kazdym razie przeciwientwo post inkrementacji), czyli index1++

Zreszta wypisz sobie w petli cala pierwsza tablice po zbindowaniu ale znak po znaku i zobacz jak to wyglada, sproboj znalezc przyczyne.

0
t0m_k-tmp napisał(a)

Cos takiego mniej wiecej ja bym dal:

void strcate(char *t1, char *t2)
{
        while(*t1 != '\0') *t1++;  /* idzie na koniec t1 */
        while((*t1++ = *t2++) != '\0'); /* dopisuje druga tablice na koniec pierwszej*/
}

Nie bardzo wiem czemu to działa, ale ważne że działa.
Z tego co widzę to raczej nie różni się to za bardzo od tego mojego.
Może ktoś mi podpowie jaki ja błąd popełniłem ?

0
t0m_k-tmp napisał(a)

Co do Twojego to pewnie wypisujesz za pomoca printf("%s");, wiec konczy Ci wypisywac jak trafi na '\0', mozliwe, ze kopiujesz za zero pierwsze, wiec sie calosc nie wyswietla, bo jak najbardziej dopisujesz druga tablice do pierwszej ;)

tab1[++index1]= tab2[index2++]; // pierwszy index bym odwrotnie inkrementowal(preinkrementacja, czy jakos tak, w kazdym razie przeciwientwo post inkrementacji), czyli index1++

Zreszta wypisz sobie w petli cala pierwsza tablice po zbindowaniu ale znak po znaku i zobacz jak to wyglada, sproboj znalezc przyczyne.

Tak, na to wygląda że kopiuję za koniec tablicy. Dzięki :)
Rozwiązanie:

z tab1[++index1]= tab2[index2++]; 
na tab1[index1++]= tab2[index2++]; 
0

Zrób coś jeszcze z zarządzaniem pamięcią. Twoja funkcja powinna alokować pamięć dynamicznie pod wynik. Uzyskasz wtedy większą elastyczność.

1 użytkowników online, w tym zalogowanych: 0, gości: 1