Here, I made a packet of all the erratas for the book "The C Programming Language (Special Edition)" from the first print of the Sepcial Edition, so it should cover all the erratas of the PhotoCopy Edition sold in China. While looking through THESE Erratas, please attertion stroustrup's word: "for BREVITY, I Use the old replacement syntax:
S / OLD / NEW / ".
- Bood (Boodweb@wx88.net)
- 2002/04/02
Errors and clarifications
Chapter 1: PG 13 S / (WITH A FEW MINOR Exceptions; See Sec B.2) / Chapter 3: PG 55 S / ENTRY & E = / Const Entry & E = / Chapter 4: PG 76 A Better Version of the Example: #include #include int main () {std :: cout << "Largest float == << std :: numeric_limits :: max () <<" CHAR IS SIGNED == ": is_signed << '/ n';} PG 77 Replace The 5th Paragraph with:" An Enumerator Can Be Initialized by a constant-expression (C.5 ) of integral type (4.1.1). The range of an enumeration holds all the enumeration's enumerator values rounded up to the nearest larger binary power minus 1. The range goes down to 0 if the smallest enumerator is non-negative. If the smallest enumerator is negative, the range goes down to - (1 max) where max is the largests value in the positive part of the range This defines the smallest bit-field capable of holding the enumerator values using the conventional two's complement representation For.. EXAMPLE: " Chapter 6: PG 109-110: S / LEFT = Left Term () and left = left-term) Could Have Been Used without Changing the meaning of the program () and left = term (/ Left = Left Term (True) and Left = Left-Term (True) Could Have Been Used Without Chang, Left = Term (True) And Left- = Term (TRUE) / PG 125 S / The increment Operators Are Particularly Useful for Incrementing and Decrementing Variables in loops./the
and - operators are particularly useful for incrementing and decrementing variables in loops./ pg 129 Add comments to first example: void * operator new (size_t); // allocate space for individual object void operator delete (void * p); // If (p) deallocate space allocated using operator new () void * operator new [] (size_t); // allocate space for array void operator delete [] (void * p); // if (p) deallocate Space Allocated Using Operator new [] () pg 130 s / an enumeration to an integral type / an integral type to an enumeration / pg 131 Clarification of the first paragraph after the first example: "The T (e) construct is sometimes referred to as a function- STYLE CAST. UNFORTUNATELY, FOR A Built-in Type T, T (E) IS Equivalent To (T) E (6.2.7). This Implies That for Many Built-in Types T (E) is Not Safe. ... "PG 131 S / Removing Const Qualifiers / Removing Const and Volatile Qualifiers / PG 134: S /` `Does P P P Point To a Valid Object, '' /` `does p point to a Valid Object (Assuming Proper Initialization), ' '/ Chapter 7: PG 146 S / 21.2.1 / 21.3.2 / Chapter 8: PG 193 Add " Driver :: no_of_errors;" To Each Catch Clause PG 195 S / Depending On Where In A Class Stack / Depending ON where in the function call stack / Chapter 9: pg 202: Improved last example: #ifdef __cplusplus // for C compilers only (9.2.4) namespace std {// the standard library is defined in namespace std (8.2.9) extern "C" {// stdio functions have c lineage (9.2.4) #ENDIF / * ... * / INT Printf (const char *, ...); / * ... * / #ifdef __cplusplus}} / / ... using std :: printf; // make printf available in global namespace // ... #ndif chapter 10: PG 246 Replace The lastsence before 10.4.5 by: "
Exceptions can be used to report failure to copy (14.4.6.2). See E.3.3 for techniques for writing exception-safe copy operations. "Pg 247 s / reverse order of construction./reverse order of construction after the body of the class 'Own Destructor Has Been Executed./ PG 251 Replace The Middle Example with Void G () {Vector
V (10); // No Need for a Delete Vector
* P = New Vector
(10 ); // useful "rel." Delete "delete p;} Using a container, such as vector, is simpler trion a new / delete pair. Furthermore, Vector Provides Exception Safety (appendix e). PG 258 S / 10.4.6.1 / 10.4.6.2 / Chapter 11: PG 265 S / Basic Type / Built-in Type (SEC4.1.1) / PG 273 S / Basic Type / Built-in Type / PG 275 S / Basic TYPE / built-in type / twice pg 280 add the sentence "Scopes outside the innermost enclosing namespace scope are not considered." before the first "For example:" and replace the first example by: class AE {/ * ... * /} ; // not a friend of y nam Espace n {class x {/ * ... * /}; // y's friend class y {friend class x; friend class z; friend class cop;}; clas z {/ * ... * /}; // Y's friend} pg 280 Improved version of 4th paragraph: "Thus, a friend function should be explicitly declared in an enclosing scope or take an argument of its class or a class derived from that (13.6) If not, the friend can not be called. . For example: "pg 284 s / string initialized (using copy constructor) / string initialized (using constructor) / pg 288 s / return b; / return f; / pg 290 replace the example using Y at the middle of the page by : Given a class y for which ->
, *, and [] have y * called p the p-> m == (* p) .M // is true (* p) .m == p [0] .m // IS True P-> m == p [0] .m // is true pg 293 better: class string {structure srep; // representation Srep * rep; Class Cref; // reference to char public: chapter 13: pg 335 s / const char [12] / const char v [12] / pg 346 s /} /}; / twice in the first senence atten ! = and = must be expressed in terms of both the container and its elements, so the element type needs to be passed to the container template The resulting container type is then passed to Basic_ops "Chapter 14:.. pg 369 better: X * P3 = New (& Buffer [10]) x; // Place x in buffer x * p4 = new (& buffer [11]) x [10]; pg 380 after the first paragraph address: "the clone Function is used to allocate a Copy of an Exception On Free Store. This Copy Will Survive The Exception Handler's Cleanup of Local Varia Bles. "Chapter 15: PG 401 Add as the Last Sentence Before 15.2.5.1:" a Potential Problem Is That Now A BB_POPUP_IVAL_SLIDER CAN't Be Implicitly Converted to An IVAL_SLIDER. "PG 408 S / IF P IS OF TYPE T * OR OR of A TYPE D * WHERE T IS A BASE CLARS OF D * WHERE T IS A BASE CLASS OF D * WHERE T IS A BASE CLASS OF D, / PG 414 Replace The First Paragraph With: "IT IS Not Possible to Cast to A Private base class, and `` casting away const '' (or volatile) requires a const_cast (6.2.7). Even then, using the result is safe only provided the object was not originally declared const (or volatile) (10.2.7.1 "
pg 415 Replace the second paragraph with: "If the value of a pointer or a reference operand of a polymorphic type is 0, typeid () throws a bad_typeid exception If the operand of typeid () has a non-polymorphic type or is not. an lvalue, the result is determined at compile time without evaluating the operand expression "pg 416 s / map layout_table; / map layout_table; / pg 422 Improve example:. void Employee :: Operator delete (void * p, size_t s) {if (p) {// delete only if p! = 0; see sec6.2.6, sec6.2.6.2 // Assume `P 'Points to` s' BYTES OF MEMORY allocated by Employee :: operator new () // and free that memory for reuse}} pg 342 s / static_cast / reinterpret_cast / twice Chapter 16: pg 431 Replace the paragraph before for the table by "A standard header with a name starting with THELETER CIQTARD LIBRARY. FOR EVERY HEADER Defining Part of The C Standard Library In The Global Namespace and Also in Namespace STD, THERE IS A HEADER Defining The Same Names in The std namespace online. "PG 433 S / S.18.7 / D.4.4.1 / on the line for PG 434 S / FABS (), // pg 457 S / Vector TMP / Vector / Chapter 17: PG 482 Improvement To Reflect Standard CorriGendum: Template Pair std :: make_pair (T1 T1, T2 T2) {RETURN PAIR (T1, T2);} PG 485 S / VALUE_TYPE; / VALUE_TYPE, / PG 493 THE ARGUMENT TO BITSET'C Onstructor Requires a conversion to string: bitset <10> B4 (String ("1010101010")); // 1010101010 BitSet <10> B5 (String ("1011011101110", 4); // 0111011110 BitSet <10>
B6 ("1011011101110", 2, 8)); // 0011011101 BitSet <10> B7 (String ("N0G00D")); // Invalid_Argument thrown bitset <10> b8 = string ("N0G00D"); //// error: no string to bitset conversion pg 496 s / size_t / ptrdiff_t / twice pg 496 add after the definition of c_array: "For compatibility with arrays, I use the signed ptrdiff_t (16.1.2) rather than the unsigned size_t as the subscript type SIZE_T COULD Lead to Subtle Ambiguities When Using [] on a c_array. "Chapter 18: PG 524 S / Operator () (const club &) / operator () (const club &) const / pg 535 s / sort (OFF.BEGIN (), OFF.END (), Person_lt) /off.sort (off, person_lt) / pg 536 / class located_in {/ class located_in: public unary_function {pg 536 s / output_iterator / ostream_iterator / pg 538 replace THE Second Example with for a call random_shuffle (B, E, R), The Generator is Called with the number of elements in the sequence as it. The Generator Must Return A Value In The Range [0, EB ). If MY_RAND Is Such a menera Tor, WE Might Shuffle a Deck of Cards Like this: Void F (Deque & DC, My_RAND & R) {Random_shuffle (Dc.Begin (), Dc.End (), R); // ...} Chapter 19: PG 562 S / Getting a const itrator./ Getting a const item./ PG 563 S / D begin () / d <- (CURR -c-> begin ()) / twice pg 568 Add at the end of the first paragraph: "Note That Deallocate () Differs from operator delete () (sec 6.2.6) In That ITS Pointer Argument May Not Be Zero." Chapter 20: PG 591 Replace The First Sentence By
WHEN a Position and a Size Are Suppar for A String In A Compare (), ONLY THE IND SUBSTRING IS Used. For Example, S.compare (POS, N, S2) IS Equivalent to String (S, POS, N) .compare (S2). "PG 596 Add to class Basic_string: void clear (); // Erase All Characters PG 599: Replace the last two declarations with: size_t strspn (const char * p, const char * q); // Number of Char in p before a char not in q size_t strcspn (const char * p, const char * q); // Number of Char in P Before a char in q PG 600-601 Expand the section Describing Conversion functions to: in and , the standard library provides useful functions for converting strings representing numeric values into numeric values for example:. double atof (const char * p); // convert p [] to double ( `` alpha to floating '') Double Strtod (const char * p, char **); // convert p [] to double (`` string to double '') int atoi (const char * p); // convert p [] To INT, Assuming Base 10 long atol (const char * p); // convert p [ ] to long, Assuming Base 10 Long Strtol (const char * p, char ** end, int b); // convert p [] to long, Assuming Base B these Functions Ignore Leading Whitespace. if The Input String Doesn't Represent A Number, Zero Is Returned. for Example, The Value of Atoi ("Seven") IS 0. If End IS Non-Zero In A Call Strtol (p, end, b), the position of the first unread character in the Input String is name available by assigning it to * end. if b == 0, a Number is Interpreted The Way A C Integer Literal IS (4.4.1);
for example, a 0x prefix means hexadecimal, 0 means octal, etc. It is undefined what happens if atof (), atoi (), or atol () converts a value that can not be represented as its respective return type. If the input string for strtol () represents a number that can not be represented as a long int or if the input string for strtod () represents a number that can not be represented as a double, errno (16.1.2, 22.3) is set to ERANGE and an appropriately Huge Or Tiny Value Is Returned. Except for the Error Handling, ATOF (s) IS Equivalent To Strtod (S, 0), ATOI (S) Is Equivalent To Int (STRTOL (S, 0, 10)), And atol (S IS Equivalent to Strtol (s, 0, 10). Chapter 21: PG 619 Somewhere Add "if a get () or getLine () Function Doesn't Read and Remove At Least One Character from The Stream, SetState (Failbit) IS Called, So That Subsequent Reads from The Stream Will Fail (22.3.6)). "Also Modify THE EXAMPLE TO: VOID SUB [256]; While (CIN) {cin.get (BUF, 256); // r EAD a line cout << BUF; // print a line // OOOPS: Forgot To Remove '/ en' from cin - the next get () will fail}} PG 621 S / BADBIT / FAILBIT / PG 621 Add At the Bottom : "IF a format error is found to five, the state is not set to badbit Because The Stream Itself isn't Corrupted. A User Could Reset The Stream (Using CLEAR ()) And Might Be Able To . skip past the problem and extract useful data from the stream "pg 623 replace the handler by catch (ios_base :: failure) {// ok: end of file reached break;} pg 629 better: template basic_ostream & Operator << (Basic_OStream & OS, Const Smanip & M) {MF (OS, MI); Return OS;
} PG 629 Better: iOS_BASE & SET_PRECISION (iOS_BASE & S, INT N) // Helper {s.Precision (N); // Call The Member Function Return S;} PG 632 S / NoskiPws () / Unsetf (iOS_BASE :: Skipws) / TWICE PG 633 S / SMANIP & M) / Const Smanip & M) / PG 635 S / << D << endl; / << 1.41421 << endl; / pg 652 s / with an initial 0x // pg 652 s / with An Initial 0X // PG 646 S / EPTR / EGPTR / TWICE Chapter 22: PG 670 See a Complete Example of Slice_Ir and Matrix for a better idea of what the Errata adds up to. PG 669 S / I / SIZE_T I / PG 671 THE LAST EXAMPLE.BETTER: V_EVEN * = V_ODD; // Multiply Element PAIRS AND Store Results in Even Elements V_ODD = 0; // Assign 0 To Every Odd Element Of D PG 674 S / INT I / SIZE_T I / TWICE PG 683 A Better Operator * (): Valarray Operator * (Const Matrix & M, Valarray & v) {Valarray res (m.dim2 ()); for (size_t i = 0; i & ri = m.Row (i); res [i] = inner_product (ri, ri.end (), & v [0], double 0);} return res;} PG 684 a better operator * (): Valarray operator * (Valarray & V, Const Matrix & M) {Valarray res (m.dim1 ()); for (SIZE_T I = 0; i & ci = m.column (i); res [i] = inner_product (ci, ci.end (), & v [0], double (0));} return res;} Chapter 25: PG 788 S / Circle * / Circle / IN 2. PG 788 S / Shape * / Shape / IN 2. Appendix A: PG 808 S / Extern const volatile clock; / Extern const volatile long clock;
/ Pg 809: In class-head replace class-key nested-name-specifier template template-id base-clause (opt with class-key nested-name-specifier (opt template-id base-clause (opt pg 811 s / indentifier (OPT) = Template-name / Indentifier (OPT) = ID-Expression / PG 811 in "template-argument:" s / template-name / id-expression / appendix c: pg 851 replace the first example by void z2 :: f (Y1 * Py1, Y2 * PY2, Y3 * PY3) {x * px = py1; // ok: x IS a public base class of y1 py1-> a = 7; // ok px = this; // ok : X is a protected base of y2, and z2 is derived from Y2 a = 7; // ok px = py2; // error: x is a protected base of y2, and z2 is derived from y2, // but do 'T Know That PY2 IS A Z2 or HOW Y2 :: X IS Used In a Non-Z2 Object Py2-> A = 7; // Error: Z2 Doesn't Know How Y2 :: A Used in A Non-Z2 Object px = py3; // error: x IS a private base of y3 py3-> a = 7; // error} PG 855: Replace the first two seences of the paragraph folly the first example of c.13.3 by: "To Declare a Template as a template parameter, we must specify its required arguments. For example, we specify that Xrefd 's template parameter C is a template class that takes a single type argument. If we did not, we would not be able to use specializations of C. "PG 858 Add" Template Before "Void K (" PG 867 S / Template Calls_foo :: Constraints (); / Template Void Calls_foo :: Constraints (Shape *); / PG 895 S /: NUM_PUT / std :: Num_PUT / PG 898 S / MY_NUMPUNCT / MY_PUNCT / PG 910 Add Before D.4.4.4: A _BYNAME VERSION (D.4, D.4.1) of time_put is also provided: Template >
Class std :: time_put_byname: public time_put {/ * ... * /}; pg 912 s / time_put () / time_put :: put () / twice pg 912 Replace The Last Paragraph with: a _byname Version (D.4, D.4.1) TIME_GET IS Also Provided: Template > class std :: time_get_byname: public time_get {/ * ... * /}; PG 915 S / DATE_FORMAT :: / date_format :: / pg 918 s / dateorder () / date_order () / pg 919 s / order = dateorder (); / order = DATE_ORDER (); / PG 919 S / TMP -> TM_MDAY = VAL [1]; / TMP-> TM_MDAY = VAL [2]; / PG 924 S / Widen (Narrow ('x')) == 'x' / widen (Narrow ('x'), 0 ) == 'x' / pg 926 S / OUT () encountered / in () encountered / pg 928 add "char ch;" Before the while-statement appendix d: pg 871 s / istream & fout / Ostream & Fout / Twice PG 880 Change the comment in the example: sort (v.begin (), v.end ()); // sort using (r) {} / : std :: numpunct (r) {} / pg 894 The Output at the default format and precision is: style A: 12345678 *** 1.23457E 06 Style B: 12 345 678 *** 1,23457e 06 PG 895 S / & S [POS] /S.BEGIN () POS / PG 898 S / .GET (OS, /. GET (* this, / pg 896 s / fill () / this-> fill () / PG 898 S / EOS, State / Eos, * this, State / PG 899 S / DKR / DKK / PG 899 S / MONEY_PUNCT'S / MONEYPUNCT '
S / PG 900 S / FRF / FRF / PG 900 S / DKR / DKK / TWICE PG 900 S / USUALLY, THE Last Character is a space./ The last character is a terminating ZERO. / PG 901 S / DKR / DKK / twice pg 901 Correct: char_type do_decimal_point () const { '.' return;} char_type do_thousands_sep () const {return ',';} pg 904 A better input function: istream & operator >> (istream & s, Money & m) {istream: : SENTRY Guard (s); // See 21.3.8 if (Guard) Try {iOS_BASE :: Iostate State = 0; // Good istreambuf_iterator eos; string string str; use_facet >>>>>> ()). GET (S, EOS, TRUE, STATE, STR); if (state == 0 || State == iOS_BASE :: EOFbit) {// set value only if get () succeed long int i = strtol (SUCCEEDED Long Int i = strtol Str.c_str (), 0,0); // for strtol (), see 20.4.1 if (errno == ERANGE) state | = iOS_BASE :: Failbit; Else M = i; // set value only if conversion to Long int successdeeded s.setstate (state);}} catch (...) {handle_ioException (s); // see d.4.2.2} Return S;} i use the get () That Reads Into a string Because Reading INTO A DOUBLE AND THEN CONVERTING TO A Long Int Could Lead to Loss of Precision. PG 904 S / D = DD / M = DD / PG 909 S / SLOPPY: No Protection Against Bufferflow / Sloppy: Hope Strftime () Will Never Product More Than 20 Characters / PG 912 S / The Default READS A TIME / THE DEFAULT GET_DATE () READS A DATE / PG 912 S / MONTH (X.TM_MON) 1 / Month (x.tm_mon 1) / PG 915 S / (f. Put (... .failed) / (f.put ()) / pg 915 s / const {curr = p; / {curr = p; / twice pg 915 s / see _io.sentry / SEE 21.3.8 / PG 916 S / MONTH (X.TM_MON) 1 / Month (x.tm_mon 1) / PG 916 S / std :: time_get / std :: time_get
/ pg 917 a better getVal (): Template in date_in :: GetVal (IN B, IN E, IOS_BASE & S, IOS_BASE :: Iostate & r, Int * V, Vtype * Res ) Const // read part of date: Number, day_of_week, or month. Skip Whitespace and puncture. {const ctype & ct = us_facet > (s.getloc ()); // ctype is defined IN D.4.5 CH C; * res = novalue; // no value found for (;;) {// Skip whitepace and puncture if (b == e) Return E; c = * b; if (! (CT. IS (ctype_base :: space, c) || ct.is (ctype_base :: punct, c)))))) Break; b;} IF (ct.is (ctype_base :: digit, c)) {// read integer WITHOUT Regard for Numpunct I = 0; Do {// Turn Digit from Arbitrary Character Set Into Decimal Value: Static Char const Digits [] = "0123456789"; i = i * 10 find (Digits, Digits 10, CT. Narrow (C, '')) - DIGITS; C = * B;} while (ct.is (ctype_base :: Digit, C)); * v = i; * res = unknown; // an integer, but We don't know what it believents return b;} if (ct.is (ctype_base :: alpha, c)) {// Look for Name of Month OR D Ay Of Week Basic_String str; while (ct. (ctype_base :: alpha, c)) {// = C; if ( b == e) Break; c = * b (} TM T; Basic_StringStream ss (str); typedef istreambuf_iterator si; // iprons type for ss' buffer get_monthname (ss.rdbuf (), Si (), s, r, & t); //// Read from In-Memory Stream Buffer IF ((i (iOS_BASE :: Badbit | iOS_BASE :: Failbit) == 0) {* v = T.TM_MON; * res = month; r = 0; RETURN B;} r = 0; // Clear State Before Get_WeekDay (ss.rdbuf (), Si (), S, R, & T);
//} {* v = t.tm_wday; = 0; return b;}} r | = ios_base: failbit = ios_base: failbit Return B;} PG 919 Replace Template > in date_in :: do_get_date (by template in date_in :: do_get_date (pg 922 a Better Count_Spaces (): INT Count_SPaces (Const String & S, Const locale & loc) {const ctype & ct = us_facet > (loc); int i = 0; for (string :: const_iterator p = s .begin (); p! = s.End (); p) ife (ct. (ctype_base :: space, * p)) i; // white whitespace as defined by ct return i;} PG 922 S / LOC.IS (Space | Punct, C) /CT.IS (ctype_base :: space | ctype_base :: punct, c) / pg 922 s / std :: ctype / std :: ctype / pg 923 s / std :: ctype / std :: ctype / pg 927 s / always_no_conv / always_noconv / pg 929 Correct: Void do_close (Catalog cat) const {ix (Catalogs.Size () <= cat) catalogs.rase (Catalogs .begin () CAT);} PG 931 S / TO_STR (Season) ... of S / TO_STR (Season X) ... Of x / pg 932 replace to_str () by const string & season_io :: to_str (season x) const {return m-> Get (CAT, X, "No-Such-Season");} PG 933 S / Such AS 12 MAY 1995 / Such AS 12 5 1995 / Appendix E: PG 939 S / RAND () / (Rand ()) / PG 944 Change Void Destroy_Elements () {for (T * P = V; P! = Space; P) P-> ~ t ();} to void destroy_elements () {for (t * p = v; p! = space; p) P-> ~ t (); space = v;} PG 945: After the Second Example, Add: However, The Default Swap () Implementation Don '
t suit our needs for vector_base because it copies and destroys a vector_base Consequently, we provide a specialization:. template void swap (vector_base & a, vector_base & b) {swap (aa, ba); swap (av , BV); SWAP (a.space, b.space); swap (a.last, b.last);} Typos
Chapter 1: PG 10 Umlauted o Missing in Wikstr? M's name. PG 19 S / Conference / Conference / Chapter 4: PG 80 S / A Vector / ARRAY / Chapter 5: PG 105 S / Arrays of Char / Array Of Char / Chapter 8: pg 168: s / separating the implementation of the interface / separating the implementation from the interface / Chapter 10: pg 229 s / The keyword static is not be repeated / The keyword static is not repeated / Chapter 11: pg 288 s / of the array / of the vector / chapter 13: PG 349 S / The Member of the set / the members of the set / chapter 14: PG 355 S /, THE Program COULD: /, A FUNCTION COULD / PG 365 S / Program Now Shrinks / Function Now Shrinks / PG 368 S / Constutors / Constructors / PG 373 S / Need To Allocate / Needs to Allocate / PG 380 S / Delete P; / Delete PE;
/ Chapter 16: PG 452 S / AND INITIAL_NOT () (is The Initial Letter Different from P?) / AND INITIAL_NOT (X) (is The Initial Letter Different from x?) / PG 468 S / CRITERIA / CRITERION / Chapter 18: pg 521 s / Consequently, the standard library supplies two adapters to allow pointers to functions to be used together with the standard algorithms. in / Consequently, in the standard library supplies two adapters to allow pointers to functions to be used together with the standard algorithms ./ pg 542 S / COMES FIRST / COME FIRST / CHAPTER 19: PG 552 S / Terms Combinations / Terms of Combinations / Chapter 20: PG 590 S / Interprete / Interpret / PG 602 S / INTER C_STR () Product / C_STR () TODUCE / PG 602 S / Rather That / Rather Than / Chapter 21: PG 617 S / A Call of Is :: Operator Void * () / a call of iStream :: Operator void * ( ) for is./ pg 630 S / A Call Width (N) Function / A Call Width (N) / PG 639 S / AND DO EXPERIMENT. / EXPERIMENT./ PG 652 S / Pecision / Precision / PG 685 S / MiniSC ule propability / minuscule probability / Appendix B: pg 815 s / to try port / try to port / Appendix D: pg 876 s / print_locale names / print_locale_names / pg 880 s / rather then C-style strings./rather than C-style strings./ pg 892 s / _byname locale / _byname facet / pg 899 s / amount / amount = / five times in the output pg 916 s / get_date () the Istream's / get_date () from the istream's / pg 924 s / ctype locale / ctype facet / pg 931 S / Season_io Locale / CTYPE FACET / APPENDIX E: PG 936 S / POINT OF VIEW A / POINT OF VIEW A / PG 952 S / T & Vector :: EMERGENCY_EXIT () / VOID Vector