11. december 2001 - 15:06Der er
4 kommentarer og 1 løsning
Array af chars
Jeg har lavet en klasse, der hedder Kommunikator, der skal bruges til at varetage noget kommunikation vha. sockets. I starten skal den fra en fil (groupview.txt) indlæse navnene på de maskiner der findes på nettet, og ligge dem ind i et array, så jeg senere kan finde et tilfældig navn fra listen, som jeg kan sende en besked til. Listen hedder \"liste\" .. lige nu er den erklæret i kontruktøren, men det skal jo helst være i private-delen for klassen. Så vidt jeg kan se, i debug-mode, bryder den sammen, under oprettelsen af mit array, hvad gør jeg galt ?? koden til konstruktøren : Kommunikator::Kommunikator() {
int current; FILE *stream; char name[MAXNAMESIZE]; current = 0;
char **liste;
*liste = new char[MAXMEMBERS];
for(int i=0; i<MAXMEMBERS; i++) liste[i]= new char[MAXNAMESIZE];
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
Jeg tror det er din allokering af memory til din liste, sammenholdt med at du sætter pointer til andre pointer i stedet for at flytte indholdet.
Prøv denne konstruktion:
{ FILE *stream; char name[MAXNAMESIZE]; int current = 0;
char *liste[MAXMEMBERS];
if ((stream = fopen(\"groupview.txt\", \"rt\")) == NULL) return; // Noget gik galt; while(feof(stream) == 0) { // Der skal være plads til nul-delimiter, ellers går det galt. if (fgets(name, sizeof(name)-1, stream) != NULL) { liste[++current] = new char[sizeof(name)]; strncpy(liste[current], name, sizeof(name)-1); }; // Hvis noget kunne læses }; // Indtil alt læst
fclose(stream); members = current; }
Både members og liste skal selvfølgelig ligger ude i selve klassens private-del, som du skriver, for at værdierne bevares efter at konstruktoren er kørt. Det er ikke nødvendigt at lave fseek på filen - når du læser, flytter den selv fil-pointer hen efter det netop læste. fseek skal du kun bruge sammen med fread og filer der er åbnet \"b\" (binary) i stedet for \"t\" (text), har fast record længde - og positionen skal da være et antal bytes svarende til antal \"blokke\" du vil frem i filen. D.o. kode læser hele første linie - og hopper så tilbage til første tegn af samme linie, læser derfra igen til slut på linien, hopper derpå tilbage til andet tegn i filen osv.
soepro>> surt det var ellers lige en for dig spørgsmålet varede kun i 6 min
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.