Program który nie chce wypisać elementów połączonej tablicy

0
 #include <stdio.h>
#include <stdlib.h>
#define MAX 100
char *sklej(char *tablica1,char *tablica2)
{
	char tab_razem[MAX];
	int i;
	for (i=0;i<ilosc(tablica1);i++)
		tab_razem[i]=tablica1[i];
	for(i=ilosc(tablica1);i<(ilosc(tablica1)+ilosc(tablica2));i++)
		tab_razem[i]=tablica2[i-ilosc(tablica1)];

	return tab_razem;
}


 int ilosc(char *t)
 {
 	int i;
 	while(t[i++]!='/0');
 	return i-1;
 }

int main()
{
    char t[MAX],t1[MAX];
    printf("wpisz do 1 tablicy");
    gets(t);
    printf("wpisz do 2 tablicy");
    gets(t1);
    int rozmiar=ilosc(t)+ilosc(t1);
    printf("%s",sklej(t,t1));
    return 0;
}

tak jak w temacie program ma łączyc dwie tablice w jedną po czym ma tą tablicę wypisywać to moja propozycja kodu

2
  1. Za każdym razem jak używasz w kodzie ilosc() kompilator wywołuje tą funkcje i ona liczy rozmiar od początku (czyli masz złożoność kwadratową zamiast liniowej).
  2. Zapominasz o inicjalicji zmiennych, więc i ma na początku wartość z kosmosu (czyli funkcja zwraca wartość od czapy).
  3. Nigdy nie używaj gets() jeżeli wcześniej nie sprawdziłeś ile jest znaków na wejściu (czyli naprawdę nigdy, lepiej użyj scanf("%99s",t);).
  4. Tablica tab_razem jest zmienną lokalną znajdującą się na stosie, po zakończeniu funkcji sklej() - zwyczajnie nie istnieje (można użyć klauzuli static).
char *sklej(char *tablica1,char *tablica2)
  {
   static char tab_razem[MAX],p,q;
   for(p=0;(p<MAX)&&(tablica1[p]);++p) tab_razem[p]=tablica1[p];
   for(q=0;(p<MAX)&&(tablica2[q]);++p,++q) tab_razem[p]=tablica2[q];
   tab_razem[p>=MAX?MAX-1:p]='\0';
   return tab_razem;
  }

Pamiętać że: rozwiązania ze zmienną statyczną nie są thread safety.

0

4 punktu dalej nie spełniłeś

0

usunąłem bo gdy pisałem odpowiedź autor edytował swój post więc odpowiedź i tak nie była już aktualna

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