eXma » Diskutieren » Computer und Technik
Startseite - Veranstaltungen - Mitglieder - Suche
Vollständige Version anzeigen: C frage
Dr_NickRiviera
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.
stth
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);
stth
zitat != edit
Dr_NickRiviera
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.
stth
dann passierte das bei fgets
wicked
Es ist vielmehr so das strlen() die Anzahl der Zeichen vor '\0' liefert.
stth
und nicht vor '\n' bzw "\r\n"

scanf: "Hallo wicked!"(\0) strlen => 13
fgets: "Hallo wicked!\n"(\0) strlen => 14