From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 109fba,df854b5838c3e14 X-Google-Attributes: gid109fba,public X-Google-Thread: 1014db,df854b5838c3e14 X-Google-Attributes: gid1014db,public X-Google-Thread: 10db24,fec75f150a0d78f5 X-Google-Attributes: gid10db24,public X-Google-Thread: 103376,df854b5838c3e14 X-Google-Attributes: gid103376,public From: Bradd W. Szonye Subject: RE: ANSI C and POSIX (was Re: C/C++ knocks the crap out of Ada) Date: 1996/04/23 Message-ID: <01bb30e2.47fc9ba0$38c2b7c7@Zany.localhost>#1/1 X-Deja-AN: 151256049 references: <4kf5mrINN47r@keats.ugrad.cs.ubc.ca> <4kgmlpINN7aj@keats.ugrad.cs.ubc.ca> <01bb2dcf.9445c060$c6c2b7c7@Zany.localhost> organization: Netcom x-netcom-date: Tue Apr 23 2:00:25 AM CDT 1996 newsgroups: comp.lang.ada,comp.lang.c,comp.lang.c++,comp.edu Date: 1996-04-23T02:00:25-05:00 List-Id: On Friday, April 19, 1996, Robert Dewar wrote... > Bradd says > > "For comparison, consider other functions that fill buffers, like sprintf > or scanf. They don't take a byte count at all. They just assume that the > programmer has the sense to provide a buffer big enough for the data you > ask for. Providing a length argument doesn't change this kind of common > sense." > > Ah, but see that this common sense is EXACTLY wrong here. Yes indeed, > I can see one style of common sense that says that the critical thing > is to provide a bug enugh buffer to accomodate the data you ask for, > bug remember that the semantics of read is that "the data you are > asking for" is either count data or all the data that is there, which > ever is smaller. > > So if there are only 5 bytes and the count is 10, then you are asking > for 5 bytes to be read, but the whole point of this rather tedious > thread is that this brand of common sense is wrong here. So you're saying that if I allocate a 10-byte buffer, and specify a count of 10 bytes, but there are only 5 bytes in the file, I would cause an error? I missed the *very* beginning of the thread that asked the original question (please don't flame me, I'm posting on general principles here), but I still don't see how my common sense would get me in trouble here. If I provide a 10-byte buffer to strncpy and and specify a count of 10 bytes, I might only get 5 "useful" bytes there, too. But I'm not going to lose any sleep over it. Now common sense, *can* get you in trouble. Take the file functions; almost all of them expect the FILE* first, but a couple want it last. That can get you in trouble if you aren't using prototypes, but fortunately C++ protects us from *that*. > Incidentally, Bradd;s first paragraph, about just trying things till they > work, and not reading the standard, is a rather appalling commentary on > the state of the way that many programmers work if you ask me. This kind > of attitude is what causes a LOT of portability problems in read life. Did I ever say I don't read the standard? I keep 9899-1990 and the ARM by the keyboard, and the C++ DWP online in HTML. When not in doubt, I let experience and common sense guide me. I get a lot more done that way than if I look everything up in the book. When in doubt, however, I read the compiler's online help/man page or the standard, depending on which is more accessible and what I'm looking for. Nonstandard stuff is only in the compiler's guide, but the standard is the final word on portability (sometimes). I don't take your last comment as a personal flame however; you're right! Too many programmers work entirely by the seats of their corduroy pants. I'm not one of them, however. With 15 years of programming experience, 6 years of C++ experience, and having taught people some of the language's finer points, my "common sense" is a little more sophisticated than an unprofessional hack's. -- Bradd W. Szonye (bradds@ix.netcom.com), Doubleplus Corporation "To chill or to pop a cap in my dome, whoomp, there it is." -- Hamlet, Prince of Denmark