Vollständige Version anzeigen:
C frage
Dr_NickRiviera
15 Apr 2008, 23:17
Hallo
habe hier eine Frage hoffe es kann mir jemand helfen:
Ich habe einfach ein
char *array[MAX];
jetzt möchte ich jeweils ein string einlesen und jeweils einem Zeiger aus array zuordnen so dass ich am Ende
einen Array mit Zeigern habe die jeweils auf ein String Zeigen.
Wie würde man es am besten machen?
Was eignet sich eigentlich besser zum einlesen eines strings: scanf oder fgets? oder gibt es eine bessere
Möglichkeit?
Muss ich für jeden String dass ich einlese extra Speicher anfordern? also wäre zb dies korrekt
array=(char *)malloc(MAX*sizof(char)) ?
könnte ich dann praktisch *(array+i)=string machen und hätte somit einem Zeiger die adresse des Strings
zugewiesen ? oder habe ich hier was durcheinander gebracht?
Wäre Dankbar für die Hilfe.
char * array[MAXANZSTRINGS];
mach dir nen ausreichend großen Puffer...
char * puffer = (char*) malloc(1024);
beliebig oft:
{
lies da nen string rein (fgets oder scanf ist egal, da gibt es widersprüchliche Aussagen)
eleminiere den Zeilenumbruch im String, der evtl drinne ist von der eingabe
puffer[strlen(puffer) - <LÄNGE DES ZEILENUMBRUCH (1 oder 2)>] = '\0';
dann miss den string mit strlen aus und erzeuge nen neues feld
array[i] = (char*) malloc(strlen(puffer) + 1);
und kopiere den Puffer rein strcpy(array[i], puffer);
}
und zuletzt einmal:
den puffer freigeben
free(puffer);
Dr_NickRiviera
16 Apr 2008, 13:41
Vielen Dank stth das hat mir sehr geholfen.
Ich musste allerdings bei (mit scanf) eingelesenen String nichts abschneiden irgendwie bzw. mit der Zeile puffer[strlen(puffer)-1]='\0'; schnitt ich immer den letzen Buchstaben ab.
also habe ich es weggelassen.
Vielen Dank nochmals und grüße.
dann passierte das bei fgets
wicked
16 Apr 2008, 17:02
Es ist vielmehr so das strlen() die Anzahl der Zeichen vor '\0' liefert.
und nicht vor '\n' bzw "\r\n"
scanf: "Hallo wicked!"(\0) strlen => 13
fgets: "Hallo wicked!\n"(\0) strlen => 14