Własna funkcja strcat

0

Witam. Chciałem dzisiaj zaimplementować własną funkcję działającą jak strcat.
Jednakże mam problem z połączeniem dwóch tablic znakowych.

Poniższy program działa.

 #include <stdio.h>
#include <string.h>

main()
{
char napisA[100] = "Pierwszy napis ";
char napisB[] = "sklejony z drugim napisem";
char *a = napisA;
char *b = napisB;
#include <stdio.h>
#include <string.h>

main()
{
char napisA[100] = "Pierwszy napis ";
char napisB[] = "sklejony z drugim napisem";
char *a = napisA;
char *b = napisB;
while(*a) a++;
while(*a++ = *b++);
printf("%s",napisA);
return 0;
}
printf("%s",napisA);
return 0;
}

Jednakże jego główną część wziąłem z internetu:

 
while(*a) a++;
while(*a++ = *b++);

Czy mógłby mi ktoś opowiedzieć jak działa w tym programie powyższy fragment kodu i czy jest dla niego jakieś alternatywne rozwiązanie, być może dłuższe ale na bardziej elementarnym poziomie? Z góry dziękuję za wyrozumiałość.

0

To samo albo bardziej rozwlekle:

int dlugosc_pierwszego = 0;
while(a[dlugosc_pierwszego]!='\0') //przesuwamy sie na koniec pierwszego stringa
  dlugosc_pierwszego++;
int dlugosc_calosci = dlugosc_pierwszego;
int licznik_drugiego = 0;
do{
  a[dlugosc_calosci]=b[licznik_drugiego];
  dlugosc_calosci++;
  licznik_drugiego++;
}while(b[licznik_drugiego++]!='\0'); //przepisujemy drugi string za tym pierwszym aż dojdziemy do końca
0
Shalom napisał(a)

To samo albo bardziej rozwlekle:

int dlugosc_pierwszego = 0;
while(a[dlugosc_pierwszego]!='\0') //przesuwamy sie na koniec pierwszego stringa
  dlugosc_pierwszego++;
int dlugosc_calosci = dlugosc_pierwszego;
int licznik_drugiego = 0;
do{
  a[dlugosc_calosci]=b[licznik_drugiego];
  dlugosc_calosci++;
  licznik_drugiego++;
}while(b[licznik_drugiego++]!='\0'); //przepisujemy drugi string za tym pierwszym aż dojdziemy do końca

Dzięki wielkie za pomoc. Wszystko rozumiem. jednakże chyba coś robie źle bo w efekcie wypisuje mi:

Pierwszy napis sljn rgmnpsm

zamiast pierwszy napis sklejony z drugim napisem

czyli bierze co drugi znak.

UPDATE: juz wiem. w ostatnim while nioepotrzebnie w jednym miejscu jest ++ dane.

Dzieki jeszcze raz i zpodrawiam

1

Czeski bląd -> dwukrotna inkrementacja licznik_drugiego++ ;)

int dlugosc_pierwszego = 0;
while(a[dlugosc_pierwszego]!='\0') //przesuwamy sie na koniec pierwszego stringa
  dlugosc_pierwszego++;
int dlugosc_calosci = dlugosc_pierwszego;
int licznik_drugiego = 0;
do{
  a[dlugosc_calosci]=b[licznik_drugiego];
  dlugosc_calosci++;
}while(b[licznik_drugiego++]!='\0'); //przepisujemy drugi string za tym pierwszym aż dojdziemy do końca

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