[comp.lang.c] fwrite man page "error"

jeff@unh.UUCP (Jeffrey E. F. Friedl) (02/22/89)

Here's a cute one.
I had a user come to me asking about fread/fwrite,
showing me the man page:

    standard fread() man page "SYNTAX" section:

	 fread(ptr, sizeof(*ptr), nitems, stream)
	 char *ptr; unsigned nitems, sizeof(*ptr)
	 FILE *stream;

Pointing to "sizeof(*ptr)" then to "char *ptr", he asked
	"but won't that always be one?"

I never noticed the "error" -- sort of cute, eh? 
I can just imagine a novice user sitting with the man page
and pounding at the program wondering why it doesn't work!

I offered that the following might be better:

---------------vvvvvvv
	 fread((char*)ptr, sizeof(*ptr), nitems, stream)
	 item *ptr; unsigned nitems, sizeof(*ptr)
---------^^^^
	 FILE *stream;

which seems to make things more clear.  I left it at that.
I suppose I should tell him that sizeof(char) is !always 1, though.

	*jeff*

------------------------------------------------------------------------------
Jeffrey Eric Francis Friedl                             Box 2173 Babcock House
..!{uunet,decvax}!unh!jeff                          Durham New Hampshire 03824

Ever worked in Japan? Let me know your "what-to-do, what-never-to-do" stories.
I'm moving there in May (or so -- whenver the Visa comes through).

mouse@mcgill-vision.UUCP (der Mouse) (03/07/89)

In article <939@unh.UUCP>, jeff@unh.UUCP (Jeffrey E. F. Friedl) writes:
> I suppose I should tell him that sizeof(char) is !always 1, though.

It's not?  The Bible, second edition, A7.4.8 (page 204), third
sentence:

	When sizeof is applied to a char, the result is 1; [...].

I think the first edition contained something similar, though I'm not
sure.  Do you know of any compilers which disagree?

					der Mouse

			old: mcgill-vision!mouse
			new: mouse@larry.mcrcim.mcgill.edu

gwyn@smoke.BRL.MIL (Doug Gwyn ) (03/08/89)

In article <1463@mcgill-vision.UUCP> mouse@mcgill-vision.UUCP (der Mouse) writes:
>In article <939@unh.UUCP>, jeff@unh.UUCP (Jeffrey E. F. Friedl) writes:
>> I suppose I should tell him that sizeof(char) is !always 1, though.
>	When sizeof is applied to a char, the result is 1; [...].
>I think the first edition contained something similar, though I'm not
>sure.  Do you know of any compilers which disagree?

K&R 1st Ed. Appendix A, generally taken as the de facto pre-ANSI C
standard, says that the units of sizeof are bytes, undefined by the
C language.  It also notes that in all existing (meaning AT&T) C
implementations byte and char are essentially synonymous.

The proposed ANSI C standard officially requires the identity between
the byte (sizeof unit) and the space used to hold a char.  There is
apparently a LOT of existing code that relied on that non-guaranteed
property, so X3J11 decided it would be a useful service to guarantee
it.  (I argued against that, for reasons posted to this newsgroup
some time ago.)