PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Arrays definieren



pfrei
23-05-2005, 13:54
Hallo zusammen!
In meinem Programm lese ich Daten, die einem bestimmten Kriterium (RC_NOTFOUND )entsprechen, per Loop ein:

if (log_rec.resp_code==RC_NOTFOUND)
{
strncpy(respnotfound[y].respurl,log_rec.url,strlen(log_rec.url));
y+=1;
}
Die Variablen sind wie folgt deklariert:

struct response_url { char respurl[MAXURL]; };
struct response_url respnotfound[5000];
struct log_struct { char url[MAXURL]; }
struct log_struct log_rec;


Nun das Problem: Wenn der Rechner mehr als 5000 Daten in die Variable "respnotfound" einleist, wird es vmtl. ein Problem geben... Den Array auf 100000 anzupassen, scheint mir auch keine gute Lösung zu sein, da das sonst einfach zuviel Speicher reserviert!

Gibt es eine Möglichkeit, dieses Array so zu deklarieren, dass man die Grösse des Arrays nicht angeben muss? (struct response_url respnotfound[]; hat leider nicht funktioniert...)

Danke für Eure Hilfe!
Patrick

ContainerDriver
23-05-2005, 18:20
Hallo.

Was du benötigst, ist wahrscheinlich dynamische Speicherverwaltung. In C geht das mit malloc (reservieren), realloc (erweitern) & free (freigeben). Informationen erhälst du in den manpages zu den genannten Funktionen oder gib diese einfach mal in google ein (oder vlt. hast du ja sogar ein C Buch, da sollte es auch drinnen stehen).

Gruss, Florian

Joghurt
23-05-2005, 19:18
BTW, eine struct mit nur einem Element ist total sinnfrei!

[0x[90]|
24-05-2005, 01:58
Btw...



struct response_url { char respurl[MAXURL]; };
struct response_url respnotfound[5000];


->



struct _response_url{char respurl[MAXURL];}resonse_url[5000];


Wenn's schon unbedingt so sein soll. Aber das ist wirklich mies.



char **response_url;


Waere da wesentlich besser. Natuerlich nicht so cool wie ein struct.

Bye

pfrei
24-05-2005, 08:59
Danke für Eure Antworten.
Wenn ich Variablen benötige, die als Inhalt folgende Struktur haben:
1 http://www.xyz.com
2 http://www.zzz.de/test.html
3 http://www.zzz.de

Würdet Ihr das denn nicht auch mit dem von mir beschriebenen Struct lösen? Dynamische Speicherverwaltung ist da wohl besser, oder? Ich kann den Struct eben nicht mit vordefinierten Elementen füllen, die die Elemente ja eben erst zur Laufzeit mit Daten gefüllt werden...

RHBaum
24-05-2005, 09:24
BTW, eine struct mit nur einem Element ist total sinnfrei!
Naja, nich in allen Faellen

Wenn der struct eine Informationseinheit darstellt, und ich nich weiss, ob spaeter noch was hinzukommt, und das zeugs durch diverse Transportschichten schleifen muss ... macht es sinn ....

weil wenn weitere daten hinzukommen, muss ich die transportschichten nur neu compilieren(natuerlich irgend ne versionsnummer noch anpassen), wenn die sauber generisch programmiert sind (kopieren mit memcpy und sizeof)
waehrend sich sonst die datentypen in den schnittstellen aendern wuerden, oder parameter hinzukommen ... duerft ich alles anfassen :-)

Sag also niemals nie.
Wenn er aber weiss, dass es immer nur bei einem element in der strukt bleiben wird ... isses wirklich zweifelhaft ....

Ciao ...