tablice znakow

0

Witam,
Mam nastepujacy problem, mam sobie napis np.: ala ma kota, i stworzylem funkcje, ktora zamienia kazda malo literke w napisie na duzo. Funkcja dziala, ale po zamianie zwraca mi jeszcze jakies smieci, w jakis sposob mozna to naprawic? Mysle ze to jest zwiazane z znakiem konca napisu "\0", ale niestety nie wiem w jaki sposob skorygowac kod, ktos naprowadzi/pomoze?
Kod:

#include <stdio.h>
#include <string.h>
char* funkcjaA(const char *nasznapis);
int main()
{
    char napis[]="ala ma kota";
    printf("%s", funkcjaA(napis));


    return 0;
}
//Podpunkt a)
char* funkcjaA(const char *nasznapis)
{
    int i;
    int length;
    length=strlen(nasznapis);
    char *tab;
    tab=(char*)malloc((length+1)*sizeof(char));
    for(i=0; i<length; i++)
    {
        if(islower(nasznapis[i]))
        {
            tab[i]=toupper(nasznapis[i]);
        }
        else
        {
            tab[i]=nasznapis[i];
        }
    }
    return tab;
}
0
  1. nie zwracasz pamięci
  2. nie wstawiasz terminatora na koniec nowego napisu.
0

Co do Ad.1
to powinnobyc jeszcze przed: return tab;
free(nasznapis);
tak?
@Edit
Problem rozwiązany w pętli for dałem i<=length i dziala poprawnie, a co do Ad.1 to o to dokladnie chodzi jak napisalem wyzej?
Oto kod po modyfikacji (dziala):

#include <stdio.h>
#include <string.h>
char* funkcjaA(const char *nasznapis);
int main()
{
    char napis[]="ala ma kota";
    printf("%s", funkcjaA(napis));


    return 0;
}
//Podpunkt a)
char* funkcjaA(const char *nasznapis)
{
    int i;
    int length;
    length=strlen(nasznapis);
    char *tab;
    tab=(char*)malloc((length+1)*sizeof(char));
    for(i=0; i<=length; i++)
    {
        if(islower(nasznapis[i]))
        {
            tab[i]=toupper(nasznapis[i]);
        }
        else
        {
            tab[i]=nasznapis[i];
        }
    }
    free(nasznapis);
    return tab;
}
2

Nie!!!! Takie coś wywali ci program - pamięć tab powinieneś zwolnić po tym jak przestaniesz używać - tu na końcu programu, ale, żeby to zrobić, musiałbyś zwrócić adres tej pamięci do jakiejś zmiennej.

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