Thread View: be.comp.programming
9 messages
9 total messages
Started by karel adams
Sun, 29 Jun 2003 09:49
beginnersprobleem C onder Linux
Author: karel adams
Date: Sun, 29 Jun 2003 09:49
Date: Sun, 29 Jun 2003 09:49
42 lines
2351 bytes
2351 bytes
dag allemaal,
mijn eerste nederige pogingen tot C-programmatie leiden al snel tot
frustratie.
mijn prog moet de eerste 128 bytes uit een bestand in een buffer lezen,
en mijn code ziet er zo uit:
#include <stdio.h>
main ()
{
int fp_bgl ; /* file pointer to file being read */
int rd_cnt ; /* will tell how many bytes were actually read
*/
char header[128] ; /* first 128 bytes in header */
FILE *fopen(), *infile ; /* the file being read */
fp_bgl=fopen("de_naam_van_mijn_bestand", "r" );
printf ("file opened with FP_BGL= %3.0d\n", fp_bgl);
rd_cnt=read(fp_bgl, header, 128);
printf ("Header was read with %3.0d bytes\n", rd_cnt);
}
Als ik dit compileer (gcc mijn_prog.c) krijg ik een verwittiging
Warning: assignment makes integer from pointer without a cast
op de lijn van de fopen, ik heb dus blijkbaar fp_bgl als verkeerd type
gedeclareerd
Heb al wat andere type gezet (char, long...) maar niks helpt.
Bij uitvoering geeft hij altijd -1 bytes gelezen dus de read lukt
effectief niet.
Wat doe ik mis? Hoe verbeter ik dit?
Omgeving = gcc egcs 2.91.66 op Suse Linux 6.3
Sorry als dit een stomme vraag is, ik heb met Google gezocht
en gemerkt dat ik allesbehalve de eerste ben die dit voorheeft
maar een duidelijk antwoord heb ik zo gauw niet gevonden....
De fopen schijnt wel te werken want als ik een niet-aanwezig
bestand invul dan begint hij van stdin te lezen...
Dank bij voorbaat!
Karel
Re: beginnersprobleem C onder Linux
Author: KLinZ
Date: Sun, 29 Jun 2003 10:19
Date: Sun, 29 Jun 2003 10:19
29 lines
2064 bytes
2064 bytes
karel adams wrote:
> #include <stdio.h>
> main ()
> {
> int fp_bgl ; /* file pointer to file being read */
>
> Als ik dit compileer (gcc mijn_prog.c) krijg ik een verwittiging
> Warning: assignment makes integer from pointer without a cast
> op de lijn van de fopen, ik heb dus blijkbaar fp_bgl als verkeerd type
> gedeclareerd
> Heb al wat andere type gezet (char, long...) maar niks helpt.
> Bij uitvoering geeft hij altijd -1 bytes gelezen dus de read lukt
> effectief niet.
> Wat doe ik mis? Hoe verbeter ik dit?
fp_bgl moet van het type FILE * zijn. Dus:
FILE *fp_bgl;
Voor de rest moet je de declaratie van fopen() weghalen. Deze is immers al
in stdio.h gedeclareerd (en ook nog eens op een andere wijze ook). Gebruik
ook fread() i.p.v. read(). Je gebruikt namelijk stream en file functies door
elkaar. En later netjes de file sluiten met fclose().
--
www.zenobits.com
Re: beginnersprobleem C onder Linux
Author: KLinZ
Date: Sun, 29 Jun 2003 10:39
Date: Sun, 29 Jun 2003 10:39
31 lines
2090 bytes
2090 bytes
KLinZ wrote:
Even een volledige recode:
#include <stdio.h>
int main () {
FILE *fp_bgl; /* file pointer to file being read */
int rd_cnt; /* will tell how many *items* were actually read */
char header[128]; /* first 128 bytes in header */
fp_bgl=fopen("de_naam_van_mijn_bestand", "r");
if(fp_bgl!=NULL) {
printf ("file opened with FP_BGL= %p\n", fp_bgl); /* op zich weinig
nuttige info */
rd_cnt=fread(header, sizeof(header), 1, fp_bgl);
printf ("Header has read %3d items\n", rd_cnt);
fclose(fp_bgl);
} else {
printf ("bestand kon niet geopend worden\n");
}
return 0;
}
Merk op dat fread niet het aantal gelezen bytes teruggeeft, maar het aantal
succesvol gelezen 'items'. Je kunt die waarde dus gebruiken om te
controleren of het lezen gelukt is.
--
www.zenobits.com
Re: beginnersprobleem C onder Linux
Author: Philip Paeps
Date: Sun, 29 Jun 2003 11:40
Date: Sun, 29 Jun 2003 11:40
17 lines
1493 bytes
1493 bytes
KLinZ <klinz@nospamzenobitsspamno.com> wrote:
> KLinZ wrote:
> Even een volledige recode:
Bijna volledig mee eens ... maar:
> char header[128]; /* first 128 bytes in header */
Ik zou die buffer 128+1 maken.
- Philip
--
Philip Paeps
BOFH Excuse #350:
paradigm shift...without a clutch
Re: beginnersprobleem C onder Linux
Author: KLinZ
Date: Sun, 29 Jun 2003 12:15
Date: Sun, 29 Jun 2003 12:15
12 lines
1566 bytes
1566 bytes
Philip Paeps wrote: >> >> char header[128]; /* first 128 bytes in header */ > > Ik zou die buffer 128+1 maken. > Waarom? Hij wil toch maar 128 bytes inlezen? Hij heeft het nergens over een zero terminated string ofzo. -- www.zenobits.com
Re: beginnersprobleem C onder Linux
Author: karel adams
Date: Sun, 29 Jun 2003 12:22
Date: Sun, 29 Jun 2003 12:22
32 lines
1857 bytes
1857 bytes
"KLinZ" <klinz@NOSPAMzenobitsSPAMNO.com> schreef in bericht news:hKALa.14197$KF1.277566@amstwist00... > Philip Paeps wrote: > >> > >> char header[128]; /* first 128 bytes in header */ > > > > Ik zou die buffer 128+1 maken. > > > > Waarom? Hij wil toch maar 128 bytes inlezen? Hij heeft het nergens over een > zero terminated string ofzo. ja kvroeg me dat ook al af klinz heeft me goed begrepen: het is binaire data die ik te lezen heb, g��n zero-terminated string terwijl we het erover hebben: als ik ze eenmaal ingelezen krijg, spreek ik de array dan aan van 1 tot 128 of van 0 tot 127? zonnige groetjes, ka (trekt nu ter bbq) > > -- > www.zenobits.com >
Re: beginnersprobleem C onder Linux
Author: Jo Vermeulen
Date: Sun, 29 Jun 2003 12:37
Date: Sun, 29 Jun 2003 12:37
36 lines
2213 bytes
2213 bytes
karel adams wrote: > > "KLinZ" <klinz@NOSPAMzenobitsSPAMNO.com> schreef in bericht > news:hKALa.14197$KF1.277566@amstwist00... >> Philip Paeps wrote: >> >> >> >> char header[128]; /* first 128 bytes in header */ >> > >> > Ik zou die buffer 128+1 maken. >> > >> >> Waarom? Hij wil toch maar 128 bytes inlezen? Hij heeft het nergens > over een >> zero terminated string ofzo. > > ja kvroeg me dat ook al af > klinz heeft me goed begrepen: het is binaire data > die ik te lezen heb, g��n zero-terminated string > terwijl we het erover hebben: > als ik ze eenmaal ingelezen krijg, > spreek ik de array dan aan van 1 tot 128 of van 0 tot 127? In C lopen array-indices altijd van 0 tot n-1 met n de lengte van de array. Dus van 0 tot 127 ja. [snip] Mvg, -- Jo Vermeulen Student Computer Science at the tUL email: jo@lumumba.luc.ac.be www: http://lumumba.luc.ac.be/jo
Re: beginnersprobleem C onder Linux
Author: Philip Paeps
Date: Sun, 29 Jun 2003 12:56
Date: Sun, 29 Jun 2003 12:56
20 lines
1995 bytes
1995 bytes
KLinZ <klinz@nospamzenobitsspamno.com> wrote:
> Philip Paeps wrote:
> > > char header[128]; /* first 128 bytes in header */
> >
> > Ik zou die buffer 128+1 maken.
>
> Waarom? Hij wil toch maar 128 bytes inlezen? Hij heeft het nergens over een
> zero terminated string ofzo.
Rare gewoonte van mij. Ik voorzie altijd de mogelijkheid om er een \0 achter
te hangen, 'just in case'. Zelfs als het geen string is, komt die \0 soms
nogal van pas als ik bizarre dingen met die data wil uitvreten.
- Philip [of is het een slechte gewoonte? ;-)]
--
Philip Paeps
BOFH Excuse #131:
telnet: Unable to connect to remote host: Connection refused
Re: beginnersprobleem C onder Linux
Author: KLinZ
Date: Sun, 29 Jun 2003 13:12
Date: Sun, 29 Jun 2003 13:12
21 lines
2074 bytes
2074 bytes
Philip Paeps wrote: > KLinZ <klinz@nospamzenobitsspamno.com> wrote: >> Philip Paeps wrote: >>>> char header[128]; /* first 128 bytes in header */ >>> >>> Ik zou die buffer 128+1 maken. >> >> Waarom? Hij wil toch maar 128 bytes inlezen? Hij heeft het nergens >> over een zero terminated string ofzo. > > Rare gewoonte van mij. Ik voorzie altijd de mogelijkheid om er een > \0 achter te hangen, 'just in case'. Zelfs als het geen string is, > komt die \0 soms nogal van pas als ik bizarre dingen met die data wil > uitvreten. > > - Philip [of is het een slechte gewoonte? ;-)] Ja. Maar jij hebt wel meer rare gewoontes, dus ik vergeef het je. -- www.zenobits.com
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads