Najprosciej to byloby chyba cos takiego:
#include <stdio.h>
#include <stdlib.h>
int main() {
char* array;
int length = 0;
printf("Wpisz rozmiar potrzebnej pamieci: ");
scanf("%d", &length);
getchar(); //pozbywamy sie entera w buforze wejscia
array = (char*)malloc(sizeof(char) * length);
printf("Zarezerwowano bajtow %d\n", length);
printf("Podaj tekst: ");
fgets(array, length, stdin);
printf("Tekst z uwzglednieniem rozmiaru: %s\n", array);
free(array);
return 0;
}
Od razu moze napisze, ze w jezyku C teksty zazwyczaj koncza sie zerowym bajtem. Dzieki temu funkcje typu printf wiedza kiedy przestac wypisywac tekst - wypisuja znaki na wyjscie az do napotkania wspomnianego zerowego bajtu. Pisze to poniewaz chcialbym podkreslic, ze liczba zarezerwowanej pamieci to nie zawsze to samo co liczba znakow dostepnych dla uzytkownika. Jezeli uzytkownik wpisze tekst "abc"(3 znaki) to w pamieci bedzie to wygladalo tak: "abc(zerowy bajt)"(4 znaki).
Z uwagi na powyzsze, jezeli uzytkownik zadeklaruje, ze potrzebuje 3 bajtow pamieci to ma do dyspozycji 3 bajty pamieci i po wpisaniu tekstu "abc" otrzyma w wyniku "ab". Jezeli Ci to przeszkadza to latwo mozna to obejsc rezerwujac pamiec o rozmiarze o jeden bajt wiecej niz podal uzytkownik.
- Jak mam traktować tab, jako zmienną do której mogę wpisać dowolny wyraz? Nie bardzo wiem co z tym teraz zrobić tzn. jak wprowadzić jakieś dane do tej zarezerwowanej pamięci.
Zerknij na kod
- Co się stanie jeśli wyraz będzie dłuższy niż zarezerwowana pamięć?
Dostales juz jedna odpowiedz, ze program moze sie wywalic, ale to jeszcze nie jest takie zle. Gorzej, jak program zacznie nadpisywac inne fragmenty pamieci - wtedy dzieja sie rozne dziwne rzeczy i tego typu bledy po pierwsze trudniej wykryc a po drugie trudniej naprawic.
PS.
Powyzszy kod to szkic. Wymaga pewnego dopracowania, obslugi bledow itp. itd.