/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Fra GCC til BCpp
Fra : Bertel Lund Hansen


Dato : 28-11-02 08:24

Hej alle

Hvorfor virker det her ikke når jeg kompilerer det med en anden
compiler? Compileren melder 0 fejl.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <dir.h>


const char path[] = "D:/Hjemside/Signe/Sydafrika/";
....
struct ffblk *fblockp;
....

int main () {
char kode;
int picnr=0, stmpnr=0, nr, pos;
char searchname[LINELENGTH], filename[LINELENGTH];
clrscr ();
fblockp=malloc (sizeof(struct ffblk));

sprintf(searchname,"%s*.jpg",path);
kode=findfirst (searchname,fblockp,0x3F);
while (!kode) {
sprintf(filename,"%s",fblockp->ff_name);
printf("%d %s\n",kode,filename);
if (fblockp->ff_fsize>STAMPLIMIT) {
picture[picnr]=malloc(sizeof(filename)+1);
sprintf(picture[picnr],"%s",filename);
...

Der ligger 6 JPG-filer i mappen, og kode bliver også sat til 0
(fil fundet), men ff_name returnerer navnet "DATA", og billederne
hedder noget med "01_..." og stigende nummer.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

 
 
Claus Rasmussen (28-11-2002)
Kommentar
Fra : Claus Rasmussen


Dato : 28-11-02 11:39

Bertel Lund Hansen wrote:

> Hvorfor virker det her ikke når jeg kompilerer det med en anden
> compiler? Compileren melder 0 fejl.
>
> #include <conio.h>
> #include <dir.h>

Disse to headers er ikke standard headers. Det betyder, at der
sagtens kan være forskelle mellem de forskellige compilere.


> const char path[] = "D:/Hjemside/Signe/Sydafrika/";

Jeg er specielt lidt skummel på, hvor Borland compileren hånd-
terer skilletegn ('/') i filnavne. Standard siger dog, at det
burde gå godt...

> ...
> struct ffblk *fblockp;

Hvorfor dynamisk allokering ? 'struct ffblk fblockp;' er til-
strækkeligt efter hvad jeg kan se af koden (det betyder dog
intet for den fejl, vi diskuterer).

> ...
>
> int main () {
> char kode;
> int picnr=0, stmpnr=0, nr, pos;
> char searchname[LINELENGTH], filename[LINELENGTH];
> clrscr ();
> fblockp=malloc (sizeof(struct ffblk));
>
> sprintf(searchname,"%s*.jpg",path);

Lav lige en 'printf("%s\n", searchname)' her.

> kode=findfirst (searchname,fblockp,0x3F);
> while (!kode) {
> sprintf(filename,"%s",fblockp->ff_name);
> printf("%d %s\n",kode,filename);
> if (fblockp->ff_fsize>STAMPLIMIT) {
> picture[picnr]=malloc(sizeof(filename)+1);
> sprintf(picture[picnr],"%s",filename);
> ...

Ellers ser det meget fornuftigt ud.

-Claus


Bertel Lund Hansen (28-11-2002)
Kommentar
Fra : Bertel Lund Hansen


Dato : 28-11-02 19:13

Claus Rasmussen skrev:

>> sprintf(searchname,"%s*.jpg",path);
>Lav lige en 'printf("%s\n", searchname)' her.

Det har jeg haft gjort. Den gav:

   D:/Hjemside/Signe/Sydafrika/*.jpg

som den skulle.

>Ellers ser det meget fornuftigt ud.

Ja, det er jo det.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Bertel Lund Hansen (28-11-2002)
Kommentar
Fra : Bertel Lund Hansen


Dato : 28-11-02 20:56

Claus Rasmussen skrev:

>> struct ffblk *fblockp;

>Hvorfor dynamisk allokering ?

Fordi det er en pointer der skal bruges i koden. Du har ret i at
det fint kunne virke med en simpel variabel, men så skal jeg til
gengæld skrive &fblockp i nogle funktionskald. Det er et
designvalg.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Mogens Hansen (01-12-2002)
Kommentar
Fra : Mogens Hansen


Dato : 01-12-02 14:15


"Bertel Lund Hansen" <nospam@lundhansen.dk> wrote in message
news:q3tcuuondhbtupu8u9ie2au2jt2jpvncpa@news.stofanet.dk...

[8<8<8<]
> gengæld skrive &fblockp i nogle funktionskald.

og ...?

> Det er et
> designvalg.

Naturligvis.
Men levetiden af objektet spiller typisk en større rolle for hvordan det
allokeres, end hvilken signatur en eller anden "tilfældig" funktion har.
Hvad hvis du skulle kalde 2 funktioner - een som tager en pointer og en som
tager en kopi ?

Venlig hilsen

Mogens Hansen



Per Abrahamsen (29-11-2002)
Kommentar
Fra : Per Abrahamsen


Dato : 29-11-02 13:34

Bertel Lund Hansen <nospam@lundhansen.dk> writes:

> Claus Rasmussen skrev:
>
>>> struct ffblk *fblockp;
>
>>Hvorfor dynamisk allokering ?
>
> Fordi det er en pointer der skal bruges i koden. Du har ret i at
> det fint kunne virke med en simpel variabel, men så skal jeg til
> gengæld skrive &fblockp i nogle funktionskald. Det er et
> designvalg.

Men det forkerte valg. Hvis du glemmer en & vil compileren fortælle
dig det, men hvis du glemmer en free får du det ikke at vide. Derfor
bør man bruge statisk eller stak allokering i stedet for heap
allokering når det er muligt.

Bertel K. Brander (28-11-2002)
Kommentar
Fra : Bertel K. Brander


Dato : 28-11-02 20:11

Bertel Lund Hansen wrote:

> Hej alle
>
> Hvorfor virker det her ikke når jeg kompilerer det med en anden
> compiler? Compileren melder 0 fejl.
>
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> #include <conio.h>
> #include <dir.h>
>
>
> const char path[] = "D:/Hjemside/Signe/Sydafrika/";
> ...
> struct ffblk *fblockp;
> ...
>
> int main () {
> char kode;
> int picnr=0, stmpnr=0, nr, pos;
> char searchname[LINELENGTH], filename[LINELENGTH];
> clrscr ();
> fblockp=malloc (sizeof(struct ffblk));
>
> sprintf(searchname,"%s*.jpg",path);
> kode=findfirst (searchname,fblockp,0x3F);
> while (!kode) {
> sprintf(filename,"%s",fblockp->ff_name);
> printf("%d %s\n",kode,filename);
> if (fblockp->ff_fsize>STAMPLIMIT) {
> picture[picnr]=malloc(sizeof(filename)+1);
> sprintf(picture[picnr],"%s",filename);
> ...
>
> Der ligger 6 JPG-filer i mappen, og kode bliver også sat til 0
> (fil fundet), men ff_name returnerer navnet "DATA", og billederne
> hedder noget med "01_..." og stigende nummer.
>
>
Du skal sætte den sidste parameter i kaldet til findfirst til 0,

ellers får du ikke almindelige filer, men disk label, directorier,
etc.

Er din disk label "DATA" ?

findfirst() returnerer en int i Borland.
Linien "picture[picnr]=malloc(sizeof(filename)+1);"
kunne skrives som picture[picnr]=malloc(strlen(filename)+1);

/bertel (nej, den anden Bertel )


Bertel Lund Hansen (28-11-2002)
Kommentar
Fra : Bertel Lund Hansen


Dato : 28-11-02 20:04

Bertel K. Brander skrev:

>Du skal sætte den sidste parameter i kaldet til findfirst til 0,
>ellers får du ikke almindelige filer, men disk label, directorier,
>etc.

>Er din disk label "DATA" ?

Nå, det var *der* det åndssvage "DATA" kom fra. Det tænkte jeg
ikke på. Ja, det er netop drevets navn.

>/bertel (nej, den anden Bertel )

He! Ved du at der kun er 385 af os i Danmark? Det er faktisk
overraskende i betragtning af hvor velkendt navnet er.

Tak for hjælpen.

--
Bertel
http://bertel.lundhansen.dk/   FIDUSO: http://fiduso.dk/

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste