Cześc :)
Mam do wykonania zadanie o trochę... dziwnej dla mnie treści. Oto one:
Napisz program, który pobierze od użytkownika tekst dowolnej długości i wyświetli go na ekranie.
W programie nie wolno korzystać z funkcji malloc oraz calloc, a na funkcję realloc został ustawiony limit pojedynczego wywołania na 50 bajtów. Oznacza to, że każdorazowo już wcsześniej przydzieloną pamięć można zwiększyć najwyżej o 50 bajtów.
W przypadku, kiedy nie uda się przydzielić za pierwszym razem pamięci program powinien wyświetlić komunikat Failed to allocate memory i zakończyć działanie z kodem błędu 8, jeżeli nie uda się powiększyć przydzielonego obszaru pamięci, program powinien wyświetlić dotychczasowo pobrany tekst.
Przykładowa interakcja z programem -- sukces:
Podaj tekst: Dolor amet dolorem velit velit ut.⏎
Dolor amet dolorem velit velit ut.⏎
Przykładowa interakcja z programem -- brak pamięci:
Podaj tekst: Ten tekst jest zbyt dlugi i nie miesci sie w pamieci⏎
Failed to allocate memory⏎
Uwaga
W programie nie wolno korzystać z operatora [].
Generalnie podam pierwszy przykładowy test, na którym mi to wyrzucało:
Napisz program, który pobierze od użytkownika tekst dowolnej długości i wyświetli go na ekranie.
W programie nie wolno korzystać z funkcji malloc oraz calloc, a na funkcję realloc został ustawiony limit pojedynczego wywołania na 50 bajtów. Oznacza to, że każdorazowo już wcsześniej przydzieloną pamięć można zwiększyć najwyżej o 50 bajtów.
W przypadku, kiedy nie uda się przydzielić za pierwszym razem pamięci program powinien wyświetlić komunikat Failed to allocate memory i zakończyć działanie z kodem błędu 8, jeżeli nie uda się powiększyć przydzielonego obszaru pamięci, program powinien wyświetlić dotychczasowo pobrany tekst.
Przykładowa interakcja z programem -- sukces:
Podaj tekst: Dolor amet dolorem velit velit ut.⏎
Dolor amet dolorem velit velit ut.⏎
Przykładowa interakcja z programem -- brak pamięci:
Podaj tekst: Ten tekst jest zbyt dlugi i nie miesci sie w pamieci⏎
Failed to allocate memory⏎
Uwaga
W programie nie wolno korzystać z operatora [].
Na podstawie tego trochę "pokminiłem" i zapisałem to w ten sposób:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char * pointer = NULL;
char * pointer_new_1 = NULL;
char * pointer_new_2 = NULL;
char * pointer_new_3 = NULL;
char * pointer_new_4 = NULL;
char * pointer_new_5 = NULL;
char * pointer_new_6 = NULL;
char * pointer_new_7 = NULL;
char * pointer_new_8 = NULL;
pointer_new_1 = (char *) realloc(pointer,sizeof(char) * 50);
if( pointer_new_1 == NULL )
{
printf("Failed to allocate memory");
return 8;
}
pointer_new_2 = (char *) realloc(pointer_new_1,sizeof(char)*50);
if( pointer_new_2 == NULL )
{
free(pointer_new_1);
printf("Failed to allocate memory");
return 8;
}
pointer_new_3 = (char *) realloc(pointer_new_2,sizeof(char)*50);
if( pointer_new_3 == NULL )
{
free(pointer_new_2);
printf("Failed to allocate memory");
return 8;
}
pointer_new_4 = (char *) realloc(pointer_new_3,sizeof(char)*50);
if( pointer_new_4 == NULL )
{
free(pointer_new_3);
printf("Failed to allocate memory");
return 8;
}
pointer_new_5 = (char *) realloc(pointer_new_4,sizeof(char)*50);
if( pointer_new_5 == NULL )
{
free(pointer_new_4);
printf("Failed to allocate memory");
return 8;
}
pointer_new_6 = (char *) realloc(pointer_new_5,sizeof(char)*50);
if( pointer_new_6 == NULL )
{
free(pointer_new_5);
printf("Failed to allocate memory");
return 8;
}
pointer_new_7 = (char *) realloc(pointer_new_6,sizeof(char)*50);
if( pointer_new_7 == NULL )
{
free(pointer_new_6);
printf("Failed to allocate memory");
return 8;
}
pointer_new_8 = (char *) realloc(pointer_new_7,sizeof(char)*50);
if( pointer_new_8 == NULL )
{
free(pointer_new_7);
printf("Failed to allocate memory");
return 8;
}
printf("Podaj tekst: ");
scanf(" %399[^\n]",pointer_new_8);
free(pointer_new_8);
return 0;
}
Ale to chyba nie jest to (do końca też nie jestem pewien, czy zapisałem to w sposób poprawny). Z góry dziękuję za wszelkie odpowiedzi.