Program łączący wprowadzone z klawiatury trzy zdania – kod nie działa prawidłowo

0

Mam za zadanie przyjąć 3 zdania od użytkownika, a następnie je połaczyć ze sobą np. "Ala Ma" "kota" "Czarka" - "Ala Ma kota Czarka".
Muszę się podpasować do danego w zadaniu nagłówka funkcji. Zrobiłem program, który chyba będzie spełniał swoją funkcjonalność jeśli uda mi się z waszą pomocą go poprawić, bo obecnie funkcja ma błędy i konsola się zawiesza
I dodatkowo nie wiem po co ma być przyjmowany size do funkcji i jak to uwzględnić. Czy przed funkcją zadeklarować

char* t4[size];

czy jakoś w funkcji to potem zmienić. Nie mam pomysłu

Kod:

#include <stdio.h>
#include <string.h>
int connect(const char* t1, const char* t2, const char* t3, char* t4, int size)
{	
	
	strcpy(t4,t1);
	printf("Wszystko git po strcpy");
	
	printf("\n%s",t4);
	strcat(t4," ");
		printf("%s",t4);
	strcat(t4,t2);
		printf("%s",t4);
		
	strcat(t4," ");
		printf("%s",t4);
    strcat(t4,t3);
    
		printf("%s",t4);
		 
    return 1;
   
}
int main()
 {
	char s1[1010];
	char s2[1010];
	char s3[1010];
	



    printf("Enter a 1 sentence\n");
    scanf( "%[^\n]%*c" , s1 );

    printf("Enter a 2 sentence\n");
    scanf( "%[^\n]%*c" , s2 );

    printf("Enter a 3 sentence\n");
    scanf( "%[^\n]%*c" , s3 );
    int size=0;
    size+= strlen(s1);
    size+= strlen(s2);
    size+= strlen(s3);
    const char* t1=s1;
	const char* t2=s2;
	const char* t3=s3;
	char* t4[size]={"lol"};
	printf("Wszystko git do funkcji");
	connect(t1,t2,t3,*t4,size);
	
    return 0;
}

Obecnie program się zawiesza w funkcji przez sam strcpy :(

0

Tak, to musi być wskaźnik na char, tylko ten Twój jest niestety typu const char*. Jak to wygląda w pamięci? Masz taką tablicę:

t4[0] = "lol"
t4[1] = NULL // do niczego nie podpięty wskaźnik
t4[2] = NULL
itd...
t4[size - 1] = NULL // z tych samych powodów

To co chcesz osiągnąć, to mieć tablicę

t[0] = 'l'
t[1] = 'o'
t[2] = 'l'
t[3] = t[4] = ... = t[size - 1] = 0

Wówczas nazwa takiej tablicy może posłużyć jako wskaźnik na char.

0

Generalnie "lol" to była totalna próba dla testu samego, bo już próbowałem czego mogłem.
Sama inicjalizacja raczej powinna zostać:

char* t4[size];

Bo musi być puste i o wielkości size;

Co do tego co napisałeś to czaje. Powinno być zapisane pewnie tak:

char* t4[size]={'l','o','l'}

Ale co do zadania to raczej powinno być puste więc wystarczy to co wyżej napisałem. Potrzebuję pomocy z samą funkcją, bo w niej albo wyrzuca błędy jak coś zmieniam albo się zawiesza konsola :/

0

Sama inicjalizacja raczej powinna zostać:

nie, tak jest błędnie. Podtrzymuję swoje zdanie na ten temat. Potrzebujesz

char t4[size];

Jak już to poprawisz (i poprawisz wywołanie funkcji), to moim zdaniem wszystko powinno śmigać.

0
    ++size; // bo trzeba policzyć jeszcze zero kończące!
    char t4[size] = "lol";
    printf("Wszystko git do funkcji");
    connect(t1, t2, t3, t4, size);
0
MarekR22 napisał(a):
    ++size; // bo trzeba policzyć jeszcze zero kończące!
    ...

Trzeba uwzględnić także rozmiar dodatkowych znaków pomiędzy ciągami w funkcji connect().
Jeden znak na każde

   strcat(t4," ");

Więc po zmianach:

     size+=3; // dodatkowe znaki i konczace zero
     char t4[size] = "lol";
     printf("Wszystko git do funkcji");
     connect(t1, t2, t3, t4, size);

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