Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Dynamiczna tablica Char w C


Rekomendowane odpowiedzi

Opublikowano

Siemano,

Potrzebuje stworzyć dynamiczną tablice typu Char.

Z tym nie mam problemu, jest przecież funkcja malloc, z tym ze gdybym chcial wpisać do tablicy dłuższe zdanie to nie chce zmuszac użytkownika do tego aby najpierw policzył ilość znaków w tym zdaniu, wpisał tą ilośc i dopiero wpisal zdanie.

Jest jakis sposób żeby wpisać zdanie, sprawdzić jego dlugość i utworzyć do niego tablice dynamiczną bez potrzeby odgórnego deklarowania ilosci znakow w juz dzialajacym programie?

Kolejne pytanie - czy jeśli mam tablice char [250], która jest wypełniona przezemnie zdaniem "ala ma kota", to co znajduje się w tablicy poza moim zdaniem?Da się te elementy wyzerować?

Opublikowano

Co do tablicy char co w niej jest, to zależy. Jeżeli tablica jest zadeklarowana globalnie - będzie wyzerowana. Jeżeli będzie lokalna, to najczęściej śmieci. Jest kilka sposobów na ustawienie tablicy domyślnie na zero:

	char tab[5] = {};

Czyli zwykła inicjacja agregatowa. Można także użyć funkcji memset:

http://en.cppreference.com/w/cpp/string/byte/memset

Co do tego pierwszego pytania, to chyba raczej nie ma możliwości zapisu do scanf bez użycia jakiegoś bufora, a przynajmniej przenośnej metody. Zawsze można użyć buforu o jakiejśtam wielkości, wczytać do niego wejście, zrobić alokacje pamięci używając strlena na buforze, skopiować bufor do zaalokowanej pamięci (memcpy: http://en.cppreference.com/w/cpp/string/byte/memcpy), wyczyścić bufor i robić to w pętli, a tablice łączyć w listy, bo raczej nie opłaca się alokować pamięć i kopiować za każdym razem w celu zwiększenia pojemności na znaki.


Pomagam w projektach dotyczących programowania (C++/C/Java/C#/inne). Jak masz jakiś problem, napisz do mnie, wspólnie poszukamy rozwiązania ;).

Opublikowano

Dzieki za odpowiedź. Jeszcze jedno pytanie:

znak spacji w tablicy char liczy sie jako nic? pusty element czy po prostu element nie widoczny "gołym okiem"?

Opublikowano

Nie. Spacja nie liczy się jako pusty znak czy znak 0. Pusty znak oznacza się najczęściej kodem '\0':

http://ideone.com/8DaIIb

Oczywiście jest tzw białym znakiem jak tabulacja czy enter, przez co przy części funkcji wczytujących z np. konsoli wczytuje jedynie pierwszy wyraz gdyż ogranicza się do białego znaku.

No i jeżeli wpisuje się łańcuch znaków w cudzysłowiach ("tekst łańcuch"), to na jego końcu będzie znak 0. Znak o wartości 0 ogólnie jest używany do terminowania łańcuchów znaków.


Pomagam w projektach dotyczących programowania (C++/C/Java/C#/inne). Jak masz jakiś problem, napisz do mnie, wspólnie poszukamy rozwiązania ;).

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...