Problem med arrays i C

Tags:    c c++ array

Hej,
Jeg er i gang med at redigere et programs menu, så hvis man går ud af et undermenu, og ind igen så skulle vi gerne være i den samme mappe.

Programmet har et enum som den sætter current_menu lig med når man er inde i en undermenu:
Fold kodeboks ind/udC kode 


Det jeg prøver er at gemme mappens sti i en 2D char array, samt current_menu i en alm integer array, når man går ud af undermenuen:
Fold kodeboks ind/udC kode 


Så næste gang man går ind i den undermenu så er vi tilbage i samme mappe:

Fold kodeboks ind/udC kode 


Også til problemet, hvis jeg går ind i undermenu "A" og mappe "1", går ud af undermenu "A", ind i udermenu "B", så er man i mappe "1". Hvis man derefter fra "B" går ind i mappe "2" og ud, og ind i "A", så er vi i "2" osv. Mine arrays ser sådan ud:

Fold kodeboks ind/udC kode 


Jeg har prøvet at lave en funktion der caster:

Fold kodeboks ind/udC kode 


Men det har ikke hjulpet. Hvis der er mere der skal smides op, så sig til, så kan jeg smide et sammendrag op på pastebin eller lign. Umiddelbart tror jeg der er noget galt med mine arrays, da den må gemme stien samme sted.

Jeg takker på forhånd for hjælpen :D



5 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 11 karma
Sorter efter stemmer Sorter efter dato
Men de 2048 er ikke antallet af bytes til at gemme stien, men antallet af pointere til at pege på stier.

'char *' er en pointer, så 'char * sti[64][2048]' er 131072 pointere. Hvis du vil kunne gemme 64 stier på max 2048 tegn, så skal det være 'char sti[64][2048]', og så skal du kopiere stien med 'strncpy' som jeg skrev.
Når du så skal bruge en af stierne igen, så skal du ikke bruge 'sti[index][2048]' men bare 'sti[index]'



Hmm...der er en hel del galt her, og der mangler en hel del information om, hvad de forskellige funktioners formål er, og hvad de tager som parametre og hvad de returnerer...så nu gætter jeg bare.

Altså, hvad er det helt præcist, at du vil gemme i dit 'sti' array ?
For lige nu har du 64 * 2048 = 131072 pointere til strenge. Er det meningen, at du vil have 64 strenge på op til 2048 tegn ?

Så skal de nemlig erklæres således:
Fold kodeboks ind/udC kode 


Når du så kopierer den nuværende sti ind i dit array, skal du gøre det med 'strncpy' funktionen:
Fold kodeboks ind/udC kode 


Hvad returnerer 'hent_sti' ? En pointer til char ?

Og hvad er formålet med 'undermappe' arrayet ?



Hej,

ang. sti array'et, så er det fordi jeg har brugt programmets originale fremgangsmåde med til at finde stien til mappen, og for at kunne bruge classen skal det være "static char *" ellers får man en "cannot convert char to char *" error.

De 64 er sådan set overkill, men det er fordi jeg tænkte 0x10 er hex tal som giver 16, og 0x20 er 32. Har aldrig rigtig arbejet med hex-tal.

2048 er det antal den selv har brugt til at lagre hele stien til en fil der senere afspilles.

Her er de steder jeg har ændret: http://pastebin.com/X0bJBaau

Her er filen på github, hvis der er interesse: https://github.com/LibXenonProject/xmplayer/blob/master/source/menu.cpp



Mange tak Robert :) Fik ændret på det og det virker nu, fjernede også undermenu int array'et, så den bruger strlen for at se om der er noget er i.




Fedt :-)



t