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ć?
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ć?
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ę.
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++;
}
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);
}