[C] co zwróci getline() gdy wpisze za duzo znaków?

0

Rzadko piszę w C ale czasami jest taka potrzeba, moje pytanie:

Posiadam:

#define MAX 256
char wiadomosc[MAX];
getline(&wiadomosc,MAX,stdin);

Co zwróci getline jak wpisze za dużo znaków i jak to ew wyłapać?

0

Powinno -1. I chyba źle przekazujesz rozmiar. http://man7.org/linux/man-pages/man3/getline.3.html
Wg tego getline potrafi doalokowac sobie brakującą pamięć o ile przekażesz wskaźnik na dynamicznie zaalokowaną tablicę.

0

Właśnie nie potrzeba mi dodatkowej alokacji bo pracuje sobie na kolejkach i taki rozmiar napisu musi być. Ale jednak olałem tego getline'a i spróbuje to zrobić na getchar() tylko jak dokładnie działa ten getchar() w C. Kiedy ta pętla się iteruje? Zauważyłem, że to sprawdzanie i>MAX-1 jest bez sensu bo nigdy tego nie sprawdzi. Więc jak inaczej to obsłużyć?

while(1)
{
wiadomosc[i] = (char) getchar();
if( (wiadomosc[i] == '\n') || ( i>(MAX-1) ))
{
wiadomosc[i] = '\0';
break;
}
i++;
}

0

Chciałbym aby użytkownik wpisywał linie, leżeli będzie za długa zostal wyswietlony komunikat, w cpp wyglądało by to mniej więcej tak.

        std::string data;
		std::cout << "WRITE DOWN COMMUNICATE: ";
		std::getline(std::cin, data);

		if (data.length() > MAX)
        {
			std::cout << "Długość ciągu za długa, usuwam wszystkie znaki po data[MAX]" << std::endl;
            data = data.substr(MAX);
		}

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