Problem z wypisaniem tablicy łańcuchów przez PUTS

0

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, jednakze przy probie wypisania wyrazow za pomoca putsa, program wysypuje sie. Doszedlem do zlych wnioskow? Źle wypisuje wyrazy za pomoca putsa? Dokonalem blednych operacji na wskaźnikach?
Bardzo prosze o pomoc:

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 <stdlib.h>
int podziel(char* zdanie,char** wyrazy);

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

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

    for(n=0;n<3;n++)
    {
        printf("%c",wyrazy[0][n]);
    }
    for(n=0;wyrazy[n]!=0;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][0]=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][0]=NULL;
             return 0;
        }


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

Zobacz ile warningów wywala Ci ten kod. Radziłbym ich nie lekceważyć szczególnie, że piszesz program w języku C, który jest specyficzny pod względem różnego rodzaju błędów i często występuje tutaj undefined behaviour.

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