048

048



Wydaje się to mato skomplikowane, prawda? Jednakże sprawdźmy opis funkcji strncpy w podręczniku Visual C++.

Funkcja strncpy kopiuje n pierwszych znaków strŻródlo do strCel i zwraca wskaźnik strCel. Jeśli liczba n jest mniejsza niż długość strZródło lub równa tej długości, to znaki puste NIE zostają dodane automatycznie do kopiowanego napisu. Jeśli liczba n jest większa niż długość strŹródło, to napis docelowy jest wypełniany brakującymi znakami pustymi.

Oznacza to, że musimy rozpatrzyć dwa przypadki: (I) kopiowany napis jest mniejszy niż bufor oraz (2) napis jest tej samej wielkości, co bufor lub od niego większy.

Jeśli napis jest mniejszy, to wszystko jest w porządku. Będzie on zakończony znakiem pustym i zostanie pomyślnie skopiowany do bufora. Jeśli napis jest większy od bufora lub ma tę samą wielkość, to kopiowany napis nie będzie zakończony znakiem pustym. Może to wywołać różne usterki. (Na przykład funkcja strłen wywołana na napisie niezakończonym znakiem pustym może przeszukać po kolei całą pamięć i zatrzymać się dopiero w miejscu, w którym napotka znak pusty.)

Musimy zająć się tym wyjątkowym przypadkiem i na końcu bufora pozostawić miejsce na znak pusty. Dlatego właśnie odejmujemy 2 od rozmiaru bufora. Następnie gwarantujemy, że ostatni znak w buforze jest zawsze zerem.

Przykład: Literał: :&operator= w pliku regexp.h

Gwarantowanie, że napisy są zakończone znakiem pustym

unikanie awarii; unikanie nieoczekiwanych wyników

Przed

const Literał &operator=(const char *pch)

{

strncpy(m_rgch, pch, sizeof(m_rgch)-1); return *this;

Po

const Literał &operator=(const char *pch)

{

strncpy(m_rgch, pch, sizeof(m_rgch)-2); m_rgch[sizeof(m_rgch) - 1] - 0; return *this;


Wyszukiwarka

Podobne podstrony:
laika, jednak wydaje się intuicyjnie zrozumiałe, dlaczego, przykładowo, uczeni sprawdzają najpierw,
7 (1033) 30 Rozdział 1 syjnej i zamienianie jej na starej konstrukcji skałkówki. Na piei wszy rzut o
P5280936 (2) Wydaje się, to inspirujące praco wyżej wymienionych autorów macanie przyczyniły się do
4 (2) I Czasem podaje się również za nazwę metalu Jego stopień utlenienia, chociaż wydaje i się to z
Obraz27 (2) 30 Rozdział 1 syjnc) i zamienianie jej na starej konstrukcji skałkówki. Na pierwszy rzu
847 MIEJSCE MARYI W DZIELE ZBAWIENIA nie tyle maryjnego dogmatu, co maryjnej pobożności. Wydaje się
DSC06641 (3) Antoni 4fl/ wĄ zdaniem była to osoba królewska. W latach wojen religijnych wydaje się
76 RECENZJE I PRZEGLĄDY PIŚMIENNICTWA w Polsce poprzez ukazanie wybitnych twórców tej nauki Wydaje s
SDC11716 Narodziny i upadek gospodarki rynkowe; kowych form egzystencji wydaje się to uzasadnione, p
Ksicfżlca, którq czytam 131 Combustibles. Wydaje się to wskazane choćby z racji rangi dialogu. W
Gazeta AMG nr 10/2014 Jak układa się współpraca z prorektorem ds. klinicznych? Wydaję się to ważne z

więcej podobnych podstron