Witam. Mam za zadanie napisać program sortujący wyrazy w C stosując sortowanie przez pozycjonowanie, gdzie sortowanie według kolejnych liter ma być wykonane sortowaniem przez zliczanie. Program działa dobrze dla wyrazów równej długości (np. 4 literowych mama,tata,adam itp.), jednak chciałbym żeby sortował też wyrazy o różnych długościach. Niestety po dodaniu komendy (oznaczonej TUTAJ), która dodaje zera (próbowałem też dodawać spację) jeśli słowa mają krótszą długość od najdłuższego wyrazu program przestaje działać. Czy ktoś wie, gdzie może być błąd ?

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX_DLUGOSC_WYRAZU 30


void drukuj_tab(char ** tab, int rozmiar_tab) {
	int i;
	printf("--------------\n");
	for (i = 0; i < rozmiar_tab; ++i)
	{
		printf("%s\n", tab[i]);
	}
	printf("--------------\n");
}

void sortowanie_pozycyjne(char ** tab, int rozmiar_tab ) {
	unsigned int rozmiary[rozmiar_tab], wsk_poz;
	int i,j ;
	unsigned int max_dl_wyrazu = 0;

	// mierzymy dlugosc wszystkich lancuchow
	for (i = 0; i < rozmiar_tab; ++i) {
		rozmiary[i] = strlen(tab[i]); // dlugosc lancucha
		if (rozmiary[i]>max_dl_wyrazu)
		{
			max_dl_wyrazu = rozmiary[i];
		}
**		else{ // TUTAJ 
			for(j=0;j<max_dl_wyrazu;j++)
			tab[i][j]=0;
		}**
	}


	char max_znak; // najwiekszy znak tj litera najdalej w alfabecie


	char ** tab_pomocnicza = (char**) malloc(sizeof(char *) * rozmiar_tab);
	for (i = 0; i < rozmiar_tab; ++i)
	{
		tab_pomocnicza[i] = (char*) malloc(sizeof(char)*MAX_DLUGOSC_WYRAZU);
	}

	for (wsk_poz = max_dl_wyrazu-1; wsk_poz >= 0; wsk_poz--)
	{
		if (wsk_poz == -1){break;}

		max_znak=0;

		// szykanie maksymalnego znaku
		for (j = 0; j < rozmiar_tab; ++j)
		{
			printf("pozycja = %d a rozmiar = %d\n", wsk_poz, rozmiary[j]);
			if (rozmiary[j] > wsk_poz && max_znak<tolower(tab[j][wsk_poz]))
			{
				max_znak = tolower(tab[j][wsk_poz]);
			}
		}

		printf("max znak = %d\n", (int)max_znak);
		int wielkosc_tab_wyn = (int)(max_znak-'a') + 2;
		printf("Wielkosc tab wyn = %d\n", wielkosc_tab_wyn);
		unsigned int wyniki[wielkosc_tab_wyn];	// przechowuje indeksy kluczy

		for (j = 0; j < wielkosc_tab_wyn; ++j) {
			wyniki[j] = 0;
		}
		

		//  sortowanie przez zliczanie
		for (j = 0; j < rozmiar_tab; ++j)	
		{
				printf("obliczony index = %d\n", tolower(tab[j][wsk_poz])-'a'+1);
				wyniki[tolower(tab[j][wsk_poz])-'a'+1]++;
				printf("zwiekszam dla znaku %c, obecnie %d\n",tolower(tab[j][wsk_poz]),wyniki[tolower(tab[j][wsk_poz])-'a'+1]);
		}


		printf("tablica indeksĂłw\n %d ,", wyniki[0]);
		// przeindeksowanie tablicy 
		for (j = 1; j < wielkosc_tab_wyn; ++j) {
			wyniki[j] = wyniki[j-1] + wyniki[j];
			printf(" %d ,",wyniki[j]);
		}
		printf("\n");


		// krok 1
		for (j = rozmiar_tab-1; j >= 0; --j)
		{
				printf("dla wyrazu %s chce wrzucic na index - wyniki [ %d ] =  %d\n", tab[j], tolower(tab[j][wsk_poz])-'a'+1, wyniki[ tolower(tab[j][wsk_poz])-'a'+1 ]-1);
				strcpy(tab_pomocnicza[ wyniki[ tolower(tab[j][wsk_poz])-'a'+1 ]-1 ], tab[j]);
				wyniki[ tolower(tab[j][wsk_poz])-'a'+1 ]--;
		}


		// przerzucanie z tab_pomocniczej do normalnej
		for (j = 0; j < rozmiar_tab; ++j)
		{
			strcpy(tab[j], tab_pomocnicza[j]);
		}

		drukuj_tab(tab,rozmiar_tab);
	}
	
}

int main() {
	int wielkosc_tab, i;
	printf("%s\n", "Podaj rozmiar tablicy :");
	scanf("%d",&wielkosc_tab);

	// dynamiczne alokowanie pamieci dla tablicy
	char ** tab = (char **)malloc(sizeof(char*) * wielkosc_tab);
	for (i = 0; i < wielkosc_tab; ++i)
	{
		tab[i] = (char *)malloc(sizeof(char)*MAX_DLUGOSC_WYRAZU);
	}
	for (i = 0; i < wielkosc_tab; ++i)
	{
		scanf("%s",tab[i]);
	}

	sortowanie_pozycyjne(tab, wielkosc_tab);

	drukuj_tab(tab,wielkosc_tab);

	return 0;
}