Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C] podstawowe pytania- funkcje malloc(), bzero()

Ostatnio zmodyfikowano 2013-10-19 17:20
Autor Wiadomość
nicpocz
Temat założony przez niniejszego użytkownika
[C] podstawowe pytania- funkcje malloc(), bzero()
» 2013-10-19 14:34:59
Witam,
Mam parę pytań dotyczących programowania w C.
1. Po co jest funkcja malloc() ? W przykładach, które robię mimo, że przydzielam tablicy charów pamięć o 3 bajtach, jestem w stanie przydzielić dużo więcej zmiennych char.
2. Jak działa funkcja bzero() w przypadku tablicy charów? Jeżeli chcę wyzerować 3 pierwsze bajty słowa "Programowanie", w efekcie dostanę "000gramowanie" czy "gramowanie" ? Inne pytanie: dlaczego w dev c++ nie działa ta funkcja mimo, że załączam odp. bibliotekę?
3. Podobno zamiast funkcji bzero() powinno się stosować memset. Ale nie rozumiem dlaczego dla tablicy charów np. "Programowanie" funkcja memset(a, 0, 1) sprawia że tablica jest pusta, a nie tak jakby można było przypuszczać, wyzeruje pierwszy bajt.

Z góry dziękuję za wszelkie podpowiedzi.
P-94008
pekfos
» 2013-10-19 15:55:46
Po co jest funkcja malloc() ?
Do dynamiczego alokowania pamięci.

Jak działa funkcja bzero() w przypadku tablicy charów? Jeżeli chcę wyzerować 3 pierwsze bajty słowa "Programowanie", w efekcie dostanę "000gramowanie" czy "gramowanie" ?
W efekcie dostaniesz "".

Podobno zamiast funkcji bzero() powinno się stosować memset. Ale nie rozumiem dlaczego dla tablicy charów np. "Programowanie" funkcja memset(a, 0, 1) sprawia że tablica jest pusta, a nie tak jakby można było przypuszczać, wyzeruje pierwszy bajt.
Zeruje tylko pierwszy bajt. Pamiętaj, że c-string to łańcuch znaków zakończony zerem.
P-94028
nicpocz
Temat założony przez niniejszego użytkownika
» 2013-10-19 16:53:03
A mogę prosić o rozwinięcie odpowiedzi 2 i 3? Nie bardzo rozumiem jaki jest sens w funkcjach argumentu związanego z bajtami, skoro i tak to jest ignorowane. Pewnie jest jakieś wytłumaczenie, ale nie potrafię od niego dojść.
P-94033
pekfos
» 2013-10-19 17:05:26
Nie bardzo rozumiem jaki jest sens w funkcjach argumentu związanego z bajtami, skoro i tak to jest ignorowane.
Co jest ignorowane?
P-94035
nicpocz
Temat założony przez niniejszego użytkownika
» 2013-10-19 17:08:00
bzero() dla tablicy charów. Mogę jako argument podać ile bajtów chcę wyzerować, podaję 3(czyli 3 chary), a mówisz, że wtedy zeruje mi cały ciąg znaków i dostaję "". Nie wiem dlaczego.

Tak samo z funkcją memset() nie wiem dlaczego niezależnie ile podam bajtów w argumencie, mój ciąg znaków jest pusty.
P-94037
pekfos
» 2013-10-19 17:19:07
Wydaje Ci się, że zerowana jest całość, bo wyświetlasz to jako c-string, a ten jest wyświetlany do napotkania pierwszego zera. Masz zero na początku, więc nic się nie wyświetla.
Zmień w wywołaniu memset() zero na inny znak. Wtedy zobaczysz co jest nadpisywane.
P-94040
nicpocz
Temat założony przez niniejszego użytkownika
» 2013-10-19 17:20:03
Wielkie dzięki;)
P-94041
« 1 »
  Strona 1 z 1