Problem 2)

Dzień dobry,
Mam problem z wypisaniem tablicy wyrazow, wszystko wydaje sie ok, litery pojawiaja sie w odpowiednich miejscach w mainie, w samej funkcji dzieki dodatkowym printfom tez doszedlem do wniosku ze moja funkcja podziel rowniez dziala prawidlowo, przy probie wypisania wyrazow za pomoca putsa wszystko jest ok do momentu kiedy nie podam w zdaniu slowa sierotka, wtedy pojawiaja mi sie jakies dziwne znaczki, ogólem cos dziwnego sie dzieje jak podaje a na koncu zwykle, ale nie zawsze.

cel mojego programu:
Napisz funkcję dzielącą przekazane jej zdanie na wyrazy. Funkcja, oprócz zdania, otrzymuje tablicę wskaźników na typ char do wypełnienia jej wyrazami. Funkcja ma przydzielić pamięć na każdy wyraz. Po ostatnim wyrazie funkcja ma umieścić w ostatnim wyrazie tablicy wartość NULL;

program:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int podziel(char* zdanie,char** wyrazy);

int main()
{
char zdanie[100];
char* wyrazy[100];
int n;

printf("Prosze wpisac zdanie w przeznaczonym do tego miejscu pod spodem tego zdania:\n");
fgets(zdanie,100,stdin);
podziel(zdanie,wyrazy);

for(n=0;wyrazy[n]!=NULL;n++)
{
    puts(wyrazy[n]);
}

return 0;

}

int podziel(char* zdanie,char** wyrazy)
{
int n;
int m;
int dl_wyraz=0;
int kol_wyraz=0;

for(n=0;n<strlen(zdanie);n++)
{
    switch (zdanie[n])
    {

    case ' ':
    {
        printf("\ncase spacja\n");

        wyrazy[kol_wyraz]=(char*)calloc(dl_wyraz,sizeof(char));
        for(m=0;m<dl_wyraz;m++)
        {
            wyrazy[kol_wyraz][m]=zdanie[n-dl_wyraz+m];
            printf("\nwyrazy[kol_wyraz][m]=%c, dla kol_wyraz=%d i m=%d \n zdanie[n-dl_wyraz+m]=%c dla [n-dl_wyraz+m]=%d\n",wyrazy[kol_wyraz][m],kol_wyraz,m,zdanie[n-dl_wyraz+m],n-dl_wyraz+m);
        }
        dl_wyraz=0;
        kol_wyraz++;
        break;
    }

    case '\n':
    {
         printf("\ncase spacja,\\n\\\n");
         wyrazy[kol_wyraz]=(char*)calloc(dl_wyraz,sizeof(char));
         for(m=0;m<dl_wyraz;m++)
         {
            wyrazy[kol_wyraz][m]=zdanie[n-dl_wyraz+m];
            printf("\nwyr/azy[kol_wyraz][m]=%c, dla kol_wyraz=%d i m=%d \n zdanie[n-dl_wyraz+m]=%c dla [n-dl_wyraz+m]=%d\n",wyrazy[kol_wyraz][m],kol_wyraz,m,zdanie[n-dl_wyraz+m],n-dl_wyraz+m);
         }
         dl_wyraz=0;
         kol_wyraz++;
         wyrazy[kol_wyraz]=NULL;

         return 0;
    }

    case '.':
    {
         printf("\ncase kropka\n");
         wyrazy[kol_wyraz]=(char*)calloc(dl_wyraz,sizeof(char));
         for(m=0;m<dl_wyraz;m++)
         {
            wyrazy[kol_wyraz][m]=zdanie[n-dl_wyraz+m];
            printf("\nwyrazy[kol_wyraz][m]=%c, dla kol_wyraz=%d i m=%d \n zdanie[n-dl_wyraz+m]=%c dla [n-dl_wyraz+m]=%d\n",wyrazy[kol_wyraz][m],kol_wyraz,m,zdanie[n-dl_wyraz+m],n-dl_wyraz+m);
         }
         dl_wyraz=0;
         kol_wyraz++;
         wyrazy[kol_wyraz]=NULL;
         return 0;
    }

    default:
    {
        printf("\nlitery litera=%c\n",zdanie[n]);
        dl_wyraz++;
        break;
    }
    }
}
return 0;

}