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

2018-12-21 21:22
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;
}
edytowany 1x, ostatnio: Adam Boduch, 2018-12-21 21:31

Pozostało 580 znaków

2018-12-21 22:07
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.


edytowany 2x, ostatnio: Shizzer, 2018-12-22 00:26
Wiesz w ogóle co piszesz? Od kiedy leci segfault z powodu niezgodności typów? - enedil 2018-12-22 00:21
Oczywiście zalecenia odnośnie respektowania ostrzeżeń podbijam. - enedil 2018-12-22 00:22
Edytowałem post. Masz rację. Dzięki za sprostowanie i sorry za pomyłkę - Shizzer 2018-12-22 00:26

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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