#include <stdio.h>
void strcat(char* a, char* b)
{
int roz_A=0,roz_B=0;
printf("\n1 petla");
while (*a)
{
a++;
roz_A++;
printf("\nAdres a %d",a);
}
printf("\n2 petla");
do
{
*a=*b;
a++;
b++;
roz_B++;
printf("\nAdres a %d, Adres b %d",a,b);
}while(*b);
printf("\nRozm A+B: %d",roz_A+roz_B);
do{
a--;
roz_A+roz_B--;
}while((roz_A+roz_B)!=0);
printf("\nWynik koncowy: ");
do
{
printf("%c",*a);
a++;
}while(*a);
}
int main()
{
char s[40];
char t[20];
int i=0;
char *ss;
char *tt=t;
//pobranie ciągów s i t
puts("podaj ciag znakow s:");
gets(s);
puts("podaj ciag znakow t:");
gets(t);
strcat(s,t);
return 0;
}
Problem tkwił w fakcie, iż posługujesz się wskaźnikami.
Wykonując operację a++, zmieniasz adres z np. Śląska 32, na Śląska 33;, dlatego potrzebujesz dodatkowo licznika, który będzie zliczać o ile adresów się przesunąłeś.
Wchodząc do kolejne pętli, nie potrzebujesz zmieniać adresu wskaźnika a, gdyż jesteś już na kolejnym wolnym adresie(bo zmieniłeś go w 1 pętli), więc wpisujemy *a=*b, następnie zmieniamy adres a++ oraz b++, tutaj również przyda nam się licznik.
Teraz wystarczy cofnąć się na adres początkowy tablicy a. W tym wypadku jest to suma licznik_A+licznik_B;
Jeżeli masz jakieś pytania to wal śmiało
Ps. Taka moja mała rada: nie bądź "rasistą iteracyjnym", iteracje nie muszą nazywać się i czy j, warto czasami je nazwać w sposób bardziej przejrzysty. Skoro zmienna ma przechowywać pewną liczbę kroków, czy nie warto nadać jej nazwę licznik_Czego++;?