Witam testowo zrobiłem program do kopiowania dwóch stringów do jednej tablicy.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* connect(char* txt1, char* txt2, int size)
{
char* txt3;
int i = 0;
txt3 = (char*)malloc(size);
while (*txt1 != '\0') {
*(txt3 + i) = *txt1;
txt1++;
i++;
}
while (*txt2 != '\0') {
*(txt3 + i) = *txt2;
i++;
txt2++;
}
return txt3;
}
int main()
{
int i;
char tab1[] = "123";
char tab2[] = " ,432";
char* txt;
int x = strlen(tab1) + strlen(tab2) + 1;
txt = connect(tab1, tab2, x);
for (i = 0; *(txt + i) != '\0'; i++) {
printf("%c", *(txt + i));
}
free(txt);
return 0;
}
Moje pytanie brzmi: dlaczego na koniec wskaznika txt dodawany jest znak końca linii , mimo iż w funkcji connect kopiowanie przerywam zanim dany tekst dojdzie do znaku '\0'. Wcześniej po drugiej pętli while miałem jeszcze ** (txt3+i)='\0'* jednak ku mojemu zdziwieniu nie zmienia to kompletnie nic. Gdy zwiększam wartość zaalokowanej pamięci dzieje się to samo.