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];
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.