Próbowałem wypisać tablicę char zakończoną znakiem null do pliku.C++ zakończone znakiem null wyprowadzenie tablicy char znaków
Rzeczywiście, otrzymuję pakiety, a następnie drukuję ich pola.
Teraz, gdy te pola nie są zakończone wartością NULL, na przykład segment danych ma rozmiar 512, ale może być lub może nie być całkowicie zajęty.
Kiedy zapisuję te dane do pliku, używam prostej przeciążonej funkcji < <, która nie wie nic na temat rzeczywistych danych i szuka tylko zakończenia segmentu danych.
Więc, jak mogę powiedzieć funkcji wyjściowej, aby napisać tylko tyle bajtów ?
Zamiast coś takiego co jest drogie, aby zadzwonić za każdym razem:
enter code here
bytescopied = strncpy(dest, src, maxbytes);
if (bytescopied < 0) { // indicates no bytes copied, parameter error
throw(fit); // error handler stuff here
} else if (bytescopied == maxbytes) {
dest[maxbytes-1] = '\0'; // force null terminator
}
W drugim wywołaniu cały drugi parametr jest okrężnym sposobem wywoływania zwykłego starego 'strlenka '. Ale w takim przypadku możesz równie dobrze użyć bardziej idiomatycznego sposobu dla całej instrukcji: 'stream << buffer'. –
Nie. Strlen nie zatrzymuje się po maxbytes. –
'strnlen' będzie. Wywołanie strnlen będzie wyglądało znacznie czystsze: "strnlen (buffer, maxbytes)". Żadnych miauczeń za pomocą wskaźników lub czegokolwiek. – gnud