[c] char* wil geen char[] worden

Pagina: 1
Acties:
  • 49 views sinds 30-01-2008

  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 20-08 14:20
Ik heb een struct:

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
typedef struct _DIRECTORY_ENTRY         /* XXX bytes */
{
   char           pcSfn[11];             /* Short File Name */
   char           pcLfn[256];            /* Long File Name */
   u_int8         ubAttrib;              /* file attributes */
   u_int32        ulBeginCluster;         /* begin cluster of file / dir data */
   u_int16        usDateCreated;
   u_int16        usDateModified;
   u_int16        usTimeCreated;
   u_int16        usTimeModified;
   u_int16        usDateAccessed;
   u_int32        ulSize;
   u_int8         ubPartitionNumber;     /* DE belongs to partition nummer (from array..) */
   u_int32        usTopLevelCluster;     /* cluster to upper dir (0 if this dir is the root) */
   u_int64        ullWrite;              /* write pointer of file   (in sectors) */
   u_int64        ullRead;               /* read pointer  (in sectors) */
   u_int16        usOFlag;               /* O-flag */
   u_int8         ubSFlag;               /* S-flag */
} DIRECTORY_ENTRY;


Nu wil ik pcSfn en pcLfn vullen dmv:
(MSDOS_GetLongFileName geeft een char* terug)

C:
1
2
3
pcTempLFN=MSDOS_GetLongFileName (pcSfn, fRoot, usCurrentDirEntry);
pstDirEntry->pcSfn = pcSfn;
pstDirEntry->pcLfn = pcTempLFN;


pstDirEntry is een pointer daar de directory_entry struct
pcSfn & pcTempLFN = pointer naar char array ( char* )

Dit werkt niet. Hij gaat eerst piepen over dat -> een '.' moet worden (maar dat is niet zo omdat de rest van de variabele ook zo gevuld worden.

Nu heb ik ook getest en dit gedaan:
C:
1
pstDirEntry->pcSfn = "test";


Ook dit vond hij niet goed. Wat is het probleem.

[ Voor 4% gewijzigd door elgringo op 10-03-2003 09:23 ]

if broken it is, fix it you should


  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 20-08 14:20
OOPS kan iemand hem moven maar P&W (beetje verkeerd geklikt)

[ Voor 5% gewijzigd door elgringo op 10-03-2003 09:25 ]

if broken it is, fix it you should


  • Willem
  • Registratie: Februari 2001
  • Laatst online: 02:05
move W&G -> PW :)

Motor (of auto) onderhoud bijhouden


  • Tommel
  • Registratie: November 2000
  • Niet online
Werkt dit wel ?

code:
1
strcpy(pstDirEntry.pcSfn, "test");

  • KnoppenSpook
  • Registratie: Augustus 2000
  • Laatst online: 04-09-2023
strcpy(pstDirEntry->pcSfn,"test");

nu probeer je er gewoon een bepaalde waarde aan toe te kennen ipv een array naar de char pointer the kopieren...

/me weet geen leuke quote voor in zijn signature


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:02
Een character array vul je niet op mbvh de = operator maar met behulp van de strcpy functie.

Als pstDirEntry een variable is , en geen pointer naar een variable, dan moet je idd de '.' operator gebruiken. De '->' operator moet je gebruiken als pstDirEntry een pointer is.
code:
1
2
3
4
5
DirInfo* ptrInfo = new DirInfo();
DirInfo   varInfo;

ptrInfo->Waarde = 10;
varInfo.Waarde = 10;

https://fgheysels.github.io/


  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 20-08 14:20
KnoppenSpook schreef op 10 maart 2003 @ 09:28:
strcpy(pstDirEntry->pcSfn,"test");

nu probeer je er gewoon een bepaalde waarde aan toe te kennen ipv een array naar de char pointer the kopieren...
maar dit:

C:
1
strcpy (pstDirEntry->pcSfn, pcSfn);


werkte niet ....

[ Voor 4% gewijzigd door elgringo op 10-03-2003 09:31 ]

if broken it is, fix it you should


  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 20-08 14:20
whoami schreef op 10 maart 2003 @ 09:30:
Een character array vul je niet op mbvh de = operator maar met behulp van de strcpy functie.

Als pstDirEntry een variable is , en geen pointer naar een variable, dan moet je idd de '.' operator gebruiken. De '->' operator moet je gebruiken als pstDirEntry een pointer is.
code:
1
2
3
4
5
DirInfo* ptrInfo = new DirInfo();
DirInfo   varInfo;

ptrInfo->Waarde = 10;
varInfo.Waarde = 10;
het is een pointer naar een struct dus ->

En toch vindt ie dat niet goed

if broken it is, fix it you should


  • KnoppenSpook
  • Registratie: Augustus 2000
  • Laatst online: 04-09-2023
en wat voor fout geeft ie dan? Compiler fout, of werkt het gewoon niet...

/me weet geen leuke quote voor in zijn signature


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

elgringo:
maar dit:

C:
1
strcpy (pstDirEntry->pcSfn, pcSfn);


werkte niet ....
want je kreeg de volgende foutmeldingen, waarschuwingen, whatever .......
:?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 20-08 14:20
KnoppenSpook schreef op 10 March 2003 @ 09:33:
en wat voor fout geeft ie dan? Compiler fout, of werkt het gewoon niet...
met strcpy geeft ie zooi terug (kopieert dus zooi)

if broken it is, fix it you should


  • KnoppenSpook
  • Registratie: Augustus 2000
  • Laatst online: 04-09-2023
en die zooi staat dus in pcSfn, staat daar wel netjes een \0 aan het eind van de gewenste string...
Anders kan strcpy er idd niet veel mee.
weet je de lengte van de string dan kan je ook memcpy(pstDirEntry->pcSfn, pcSfn, nLengte);
gebruiken

/me weet geen leuke quote voor in zijn signature


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

elgringo:
met strcpy geeft ie zooi terug (kopieert dus zooi)
Waar heb je het over :? Wees eens wat duidelijker!

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 20-08 14:20
Die methode die moet een *DIRECTORY_ENTRY terug geven (het is methode die opeenvolgend een filename teruggeeft (findnext)

Nu wordt die *DIRECTORY_ENTRY (pstDirEntry) gevuld mbv strcpy. Als ik dan:
C:
1
printf("LFN: %s \r", pstDirEntry->pcLfn);

In de methode werkt dit prima.

Maar de functie die de *DIRECTORY_ENTRY terugkrijgt niet
C:
1
2
3
4
5
6
7
8
9
10
11
u_int8 MSDOS_FindNext( char *pcFileName )
{
   DIRECTORY_ENTRY *pstDirEntry;

   pstDirEntry = MSDOS_NextDirEntry();
   printf("LFN in find XXX : %s \r", pstDirEntry->pcLfn);

   strcpy(pcFileName,pstDirEntry->pcLfn);

   return( MSDOS_NO_ERROR );
}


terwijl de pointer wel goed is.

(hij gooit zooi op het scherm en leest waarschijnlijk een eenw illekeurig geheugen adres, denk ik)

if broken it is, fix it you should


  • KnoppenSpook
  • Registratie: Augustus 2000
  • Laatst online: 04-09-2023
Je kan toch geen data kopieren naar een *DIRECTORY_ENTRY structure pointer ??

Kan jij wel C programmeren??

<edit>
Ik doel op deze regel
Nu wordt die *DIRECTORY_ENTRY (pstDirEntry) gevuld mbv strcpy.

[ Voor 35% gewijzigd door KnoppenSpook op 10-03-2003 09:56 ]

/me weet geen leuke quote voor in zijn signature


  • SWfreak
  • Registratie: Juni 2001
  • Niet online
Lees jij de boel wel goed. Hij kopieert er data vandaan....

Edit:
<edit>Ik doel op deze regel [...]
Daar zit het probleem niet, want de printf daar gaat wel goed.
Er gaat kennlijk iets mis met het teruggeven van de boel.

elgringo: kun je niet met een debugger eens kijken wat er precies gebeurd met die pointers?

[ Voor 70% gewijzigd door SWfreak op 10-03-2003 10:12 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

elgringo schreef op 10 March 2003 @ 09:43:
Die methode die moet een *DIRECTORY_ENTRY terug geven (het is methode die opeenvolgend een filename teruggeeft (findnext)

Nu wordt die *DIRECTORY_ENTRY (pstDirEntry) gevuld mbv strcpy. Als ik dan:
C:
1
printf("LFN: %s \r", pstDirEntry->pcLfn);

In de methode werkt dit prima.

Maar de functie die de *DIRECTORY_ENTRY terugkrijgt niet
C:
1
2
3
4
5
6
7
8
9
10
11
u_int8 MSDOS_FindNext( char *pcFileName )
{
   DIRECTORY_ENTRY *pstDirEntry;

   pstDirEntry = MSDOS_NextDirEntry();
   printf("LFN in find XXX : %s \r", pstDirEntry->pcLfn);

   strcpy(pcFileName,pstDirEntry->pcLfn);

   return( MSDOS_NO_ERROR );
}


terwijl de pointer wel goed is.

(hij gooit zooi op het scherm en leest waarschijnlijk een eenw illekeurig geheugen adres, denk ik)


wat is pcFileName? Heb je dat gealloceerd voor je die functie aanroept?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 20-08 14:20
SWfreak schreef op 10 March 2003 @ 09:55:
Lees jij de boel wel goed. Hij kopieert er data vandaan....

Edit:
[...]

Daar zit het probleem niet, want de printf daar gaat wel goed.
Er gaat kennlijk iets mis met het teruggeven van de boel.

elgringo: kun je niet met een debugger eens kijken wat er precies gebeurd met die pointers?
nee geen rechten voor, wordt nog geregeld :(

if broken it is, fix it you should


  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 20-08 14:20
.oisyn schreef op 10 March 2003 @ 10:12:

[...]


wat is pcFileName? Heb je dat gealloceerd voor je die functie aanroept?
ja hier gaat ie de fout niet in, dit werkte ook bij een ander filesysteem.

if broken it is, fix it you should


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

oh ok, dan geeft MSDOS_NextDirEntry() dus geen goede DIRECTORY_ENTRY terug

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

KnoppenSpook schreef op 10 March 2003 @ 09:48:
Kan jij wel C programmeren??
Zie in openingspost:
elgringo schreef op 10 March 2003 @ 09:21:
C:
1
2
3
char           pcSfn[11];            /* Short File Name */

pstDirEntry->pcSfn = "test";

Ook dit vond hij niet goed. Wat is het probleem.
:X :/

Na dit topic zo doorgelezen te hebben kan ik ook niet veel meer doen dan de topicstarter het advies te geven in godesnaam een boek te kopen over programmeren want veel snapt ie er nog niet van. Iig bij lange na niet genoeg om met filesystemen, clusters en ander eng spul in C te gaan zitten kloten. :|

[ Voor 8% gewijzigd door curry684 op 10-03-2003 10:33 . Reden: Typo's ]

Professionele website nodig?


  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 20-08 14:20
curry684 schreef op 10 March 2003 @ 10:32:
[...]

Zie in openingspost:

[...]

:X :/

Na dit topic zo doorgelezen te hebben kan ik ook niet veel meer doen dan de topicstarter het advies te geven in godesnaam een boek te kopen over programmeren want veel snap je er nog niets van. Iig bij lange na niet genoeg om met filesystemen, clusters en ander eng spul in C te gaan zitten kloten. :|
Als ik dit doe:
C:
1
char[] pcTest = "blaat";

werkt ie wel

(dus was ik er vanuitgegaan dat dit met pstr->pc ook zou moeten werken)

if broken it is, fix it you should


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

elgringo schreef op 10 maart 2003 @ 10:36:
[...]
Als ik dit doe:
C:
1
char[] pcTest = "blaat";

werkt ie wel

(dus was ik er vanuitgegaan dat dit met pstr->pc ook zou moeten werken)
I repeat myself: koop een boek :)

[ Voor 4% gewijzigd door curry684 op 10-03-2003 10:38 . Reden: blah typo meegequote ]

Professionele website nodig?


  • KnoppenSpook
  • Registratie: Augustus 2000
  • Laatst online: 04-09-2023
vandaar dat een boekje misschien niet zo'n slecht idee is, zodat je het verschil leert ....

Success by the way, je hebt er nl wel zin in!!

/me weet geen leuke quote voor in zijn signature


Verwijderd

Of begin een geheel nieuwe carriere als groentenboer ofzo

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
offtopic:
KnoppenSpook, kan je je icoon niet veranderen, ik denk elke keer dat ik reply's van drm zit te lezen 8:7


TS: het gaat er niet om dat je code foutloos compileert, maar het gaat er toch meer om dat je weet wat je fout doet?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

Bedenk overigens dat achter de short file name geen null teken staat om de string af te sluiten. Hij heeft slechts lengte 11, en een short filename is ook 11 tekens. Die printf gaat dus zeker fout (gebruik %.11s ipv %s)

kopieer ook met strncpy, en zet er met de hand een terminating null achter:
C:
1
2
strncpy (pcFileName, pstDirEntry->pcLfn, 11);
pcFileName[11] = 0;

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 20-08 14:20
C:
1
2
3
pcTempLFN=MSDOS_GetLongFileName (pcSfn, fRoot, usCurrentDirEntry);
strcpy(pstDirEntry->pcLfn, pcTempLFN);
strcpy(pstDirEntry->pcSfn, pcSfn);


met vars:
C:
1
2
char* pcSfn= (char *) malloc[12];
char* pcTempLFN;


Nu werkt de pcSFN wel maar de pcLfn niet. pcTempLfn bevat wel de juiste string maar het kopieren ervan lukt niet.

if broken it is, fix it you should


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

En nu moeten wij raden wat er gebeurd in die onbedocumenteerde functie MSDOS_GetLongFileName?

Professionele website nodig?


  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 20-08 14:20
.oisyn schreef op 10 maart 2003 @ 10:47:
Bedenk overigens dat achter de short file name geen null teken staat om de string af te sluiten. Hij heeft slechts lengte 11, en een short filename is ook 11 tekens. Die printf gaat dus zeker fout (gebruik %.11s ipv %s)
erger nog, die printf werkt prima

if broken it is, fix it you should


  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 20-08 14:20
curry684 schreef op 10 March 2003 @ 11:15:
En nu moeten wij raden wat er gebeurd in die onbedocumenteerde functie MSDOS_GetLongFileName?
nee....

Die geeft een char* terug en wordt gekopieerd naar pcTempLFn, die dus de juiste waarde bevat. Maar het kopieren werkt niet, wat kan er fout zijn?

if broken it is, fix it you should


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

elgringo schreef op 10 March 2003 @ 11:17:

erger nog, die printf werkt prima


je spreekt jezelf tegen:
elgringo schreef op 10 March 2003 @ 09:43:
(hij gooit zooi op het scherm en leest waarschijnlijk een eenw illekeurig geheugen adres, denk ik)
elgringo schreef op 10 March 2003 @ 11:12:
C:
1
char* pcSfn= (char *) malloc[12];
malloc is een functie, het moet dan ook met ( ) en niet met [ ] (geeft dat geen compile errors :?)

anyway, koop alsjeblieft een C boek en ga leren, wat nu ben je gewoon aan het prutsen zonder dat je echt doorhebt wat je doet :{

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1

Dit topic is gesloten.