Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
| From | Keith Thompson <kst-u@mib.org> |
|---|---|
| Newsgroups | comp.lang.c |
| Subject | Re: looking at binary files with C |
| Date | 2011-06-12 16:14 -0700 |
| Organization | None to speak of |
| Message-ID | <lnfwne7ic4.fsf@nuthaus.mib.org> (permalink) |
| References | (1 earlier) <1bk4crnhkt.fsf@snowball.wb.pfeifferfamily.net> <95kmvoFn2bU1@mid.individual.net> <it3apt$eb0$1@dont-email.me> <lnoc227n6w.fsf@nuthaus.mib.org> <95kt2cF48sU1@mid.individual.net> |
Uno <Uno@example.invalid> writes:
>> "BartC"<bc@freeuk.com> writes:
>>> "Uno"<Uno@example.invalid> wrote in message
>>> news:95kmvoFn2bU1@mid.individual.net...
>>>
>>>> a[c] = ++a[c];
>>>
>>> I think just:
>>>
>>> ++a[c];
>>>
>>> will do here, since ++ also modifies it's operand as well as return it's
>>> value plus 1.
>>
>> In fact the behavior of a[c] = ++a[c] is undefined, since it modifies
>> a[c] twice without an intervening sequence point.
>>
>
> I changed that. So now I'm trying to get the data in a dynamic array:
And do what with it?
> $ indent -i3 hist7.c
[...]
> $ cat hist7.c
> #include <stdio.h>
> #include <limits.h>
> #include <stdlib.h>
> #define SIZE 20000000
> #define SIZE2 (UCHAR_MAX+1)
>
> int
> main (void)
> {
> int c;
> long counter = 0;
> long counter2 = 0;
> long counter3 = 0;
> long a[SIZE2], b[SIZE2];
> long i, j, end;
> FILE *fp;
> char filename[] = "shoulder.wmv";
> unsigned char *p;
>
> fp = fopen (filename, "rb+");
> fseek (fp, 0L, SEEK_END);
> end = ftell (fp);
> fseek (fp, 0L, SEEK_SET);
> printf ("file_length is %ld\n", end);
> p = malloc (end);
You don't check whether malloc() succeeded. (Don't bother telling
us how much memory you have; just check whether p==NULL.)
Note that the fseek() method isn't guaranteed to tell you the size
of the file. It probably does so on your system, but the standard
doesn't guarantee it.
(And as long as your code is non-portable, you probably might as well
use some non-portable method like fstat().)
If it works on your system, and if you're sufficiently sure that
the file's size won't change while the program is running, that's
probably ok.
> for (i = 0; i < (SIZE2); ++i)
> {
> a[i] = 0;
> }
> for (j = 0; j < SIZE; ++j)
> {
> c = fgetc (fp);
> counter++;
You increment counter even when fgetc() returns EOF? I don't know what
you're counting, so I can't tell whether that's right or not.
> if (c != EOF)
> {
> p[j] = c;
> ++a[c];
> }
> else
> break;
> }
[snip]
>
> // cc -Wall -Wextra hist7.c -o hist
> $
>
> Does the malloc'ing look good for reading this file? Also, what do
> POSIX and C say about the EOF character itself? If my data are typical,
> I would say that neither thinks that EOF is part of the file.
There is no "EOF character". fgetc() returns *either* the value
of the character it just read (treated as an unsigned char and
converted to int) *or* the special value EOF if it was unable to
read a character.
Typically UCHAR_MAX==255 (it could be larger) and EOF==-1 (it can
be any negative int value). So fgetc() will return either a value
in the range 0..255, or the value -1.
No, EOF is not part of the file; it's an indication that there's
nothing more in the file, or that there was an error. You can call
feof() and/or ferror() to determine which.
Do you really need to read the entire file into memory? Perhaps you
do, but it's often better to process the data as you're reading it.
It depends on what your goal is.
[...]
--
Keith Thompson (The_Other_Keith) kst-u@mib.org <http://www.ghoti.net/~kst>
Nokia
"We must do something. This is something. Therefore, we must do this."
-- Antony Jay and Jonathan Lynn, "Yes Minister"
Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
looking at binary files with C Uno <Uno@example.invalid> - 2011-06-12 00:06 -0600
Re: looking at binary files with C Ian Collins <ian-news@hotmail.com> - 2011-06-12 18:41 +1200
Re: looking at binary files with C Uno <Uno@example.invalid> - 2011-06-12 00:58 -0600
Re: looking at binary files with C Barry Schwarz <schwarz45@yahoo.com> - 2011-06-12 00:05 -0700
Re: looking at binary files with C Uno <Uno@example.invalid> - 2011-06-12 01:41 -0600
Re: looking at binary files with C "Joachim Schmitz" <jojo.nospam@schmitz-digital.de> - 2011-06-12 11:44 +0200
Re: looking at binary files with C Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2011-06-12 10:25 -0600
Re: looking at binary files with C Ike Naar <ike@sverige.freeshell.org> - 2011-06-12 10:26 +0000
Re: looking at binary files with C Eric Sosman <esosman@ieee-dot-org.invalid> - 2011-06-12 08:23 -0400
Re: looking at binary files with C Hans Vlems <hvlems@freenet.de> - 2011-06-13 23:48 -0700
Re: looking at binary files with C Tim Rentsch <txr@alumni.caltech.edu> - 2011-06-23 00:55 -0700
Re: looking at binary files with C "BartC" <bc@freeuk.com> - 2011-06-12 14:26 +0100
Re: looking at binary files with C Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2011-06-12 10:24 -0600
Re: looking at binary files with C Uno <Uno@example.invalid> - 2011-06-12 14:47 -0600
Re: looking at binary files with C "BartC" <bc@freeuk.com> - 2011-06-12 22:23 +0100
Re: looking at binary files with C Keith Thompson <kst-u@mib.org> - 2011-06-12 14:29 -0700
Re: looking at binary files with C Uno <Uno@example.invalid> - 2011-06-12 16:31 -0600
Re: looking at binary files with C Keith Thompson <kst-u@mib.org> - 2011-06-12 16:14 -0700
Re: looking at binary files with C Uno <Uno@example.invalid> - 2011-06-12 18:41 -0600
Re: looking at binary files with C Eric Sosman <esosman@ieee-dot-org.invalid> - 2011-06-12 17:42 -0400
Re: looking at binary files with C Uno <Uno@example.invalid> - 2011-06-12 17:01 -0600
Re: looking at binary files with C Keith Thompson <kst-u@mib.org> - 2011-06-12 16:23 -0700
Re: looking at binary files with C Uno <Uno@example.invalid> - 2011-06-12 17:24 -0600
Re: looking at binary files with C Ian Collins <ian-news@hotmail.com> - 2011-06-13 11:28 +1200
Re: looking at binary files with C Geoff <geoff@invalid.invalid> - 2011-06-12 16:52 -0700
Re: looking at binary files with C Keith Thompson <kst-u@mib.org> - 2011-06-13 08:51 -0700
Re: looking at binary files with C Seebs <usenet-nospam@seebs.net> - 2011-06-13 14:39 +0000
Re: looking at binary files with C Uno <Uno@example.invalid> - 2011-06-13 20:01 -0600
Re: looking at binary files with C Keith Thompson <kst-u@mib.org> - 2011-06-13 19:24 -0700
Re: looking at binary files with C Seebs <usenet-nospam@seebs.net> - 2011-06-14 17:02 +0000
Re: looking at binary files with C Uno <Uno@example.invalid> - 2011-06-16 01:32 -0600
Re: looking at binary files with C Eric Sosman <esosman@ieee-dot-org.invalid> - 2011-06-13 07:57 -0400
Re: looking at binary files with C Uno <Uno@example.invalid> - 2011-06-13 20:23 -0600
Re: looking at binary files with C Eric Sosman <esosman@ieee-dot-org.invalid> - 2011-06-13 23:12 -0400
Re: looking at binary files with C lovecreatesbeauty <lovecreatesbeauty@gmail.com> - 2011-06-14 01:09 -0700
Re: looking at binary files with C Oliver Jackson <chexmofo@hotmail.com> - 2011-06-15 20:15 -0700
Re: looking at binary files with C Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2011-06-12 18:41 -0600
Re: looking at binary files with C James Waldby <not@valid.invalid> - 2011-06-13 01:16 +0000
Re: looking at binary files with C Uno <Uno@example.invalid> - 2011-06-12 19:48 -0600
Re: looking at binary files with C "io_x" <a@b.c.invalid> - 2011-06-14 12:19 +0200
Re: looking at binary files with C lovecreatesbeauty <lovecreatesbeauty@gmail.com> - 2011-06-14 03:58 -0700
Re: looking at binary files with C "io_x" <a@b.c.invalid> - 2011-06-14 19:07 +0200
Re: looking at binary files with C "io_x" <a@b.c.invalid> - 2011-06-14 19:46 +0200
Re: looking at binary files with C Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2011-06-14 16:08 -0600
Re: looking at binary files with C Ian Collins <ian-news@hotmail.com> - 2011-06-15 08:47 +1200
Re: looking at binary files with C Hans Vlems <hvlems@freenet.de> - 2011-06-13 23:51 -0700
Re: looking at binary files with C Michael Press <rubrum@pacbell.net> - 2011-06-15 13:06 -0700
Re: looking at binary files with C Uno <Uno@example.invalid> - 2011-06-16 01:38 -0600
Re: looking at binary files with C Michael Press <rubrum@pacbell.net> - 2011-06-16 00:54 -0700
Re: looking at binary files with C James Waldby <not@valid.invalid> - 2011-06-16 16:59 +0000
Re: looking at binary files with C "J. J. Farrell" <jjf@bcs.org.uk> - 2011-06-16 18:32 +0100
csiph-web