_
toggle menu eXmatrikulationsamt.de
online: 372 gäste
Themen Layout: [Standard] · Linear · Outline Thema abonnieren | Thema versenden | Thema drucken
post 15 Apr 2008, 23:17
avatar
Vordiplom
*****

Punkte: 739
seit: 22.06.2005

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.
ProfilPM
AntwortenZitierenTOP
post 16 Apr 2008, 09:41
avatar
der vierkonsonantige
*********

Punkte: 3812
seit: 12.12.2003

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);

Dieser Beitrag wurde von stth: 16 Apr 2008, 09:44 bearbeitet


--------------------
jeden tag einen dummen kommentar!
hab ich bei den fadfindern gelernt.
bild kann nicht angezeigt werden

bild kann nicht angezeigt werden bild kann nicht angezeigt werden bild kann nicht angezeigt werden bild kann nicht angezeigt werden
"if you have a hammer, every problem looks like a nail"
ProfilPM
AntwortenZitierenTOP
post 16 Apr 2008, 09:44
avatar
der vierkonsonantige
*********

Punkte: 3812
seit: 12.12.2003

zitat != edit

Dieser Beitrag wurde von stth: 16 Apr 2008, 09:44 bearbeitet
ProfilPM
AntwortenZitierenTOP
post 16 Apr 2008, 13:41
avatar
Vordiplom
*****

Punkte: 739
seit: 22.06.2005

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.
ProfilPM
AntwortenZitierenTOP
post 16 Apr 2008, 16:59
avatar
der vierkonsonantige
*********

Punkte: 3812
seit: 12.12.2003

dann passierte das bei fgets
ProfilPM
AntwortenZitierenTOP
post 16 Apr 2008, 17:02
avatar
No-Know-How
*****

Punkte: 631
seit: 27.04.2007

Es ist vielmehr so das strlen() die Anzahl der Zeichen vor '\0' liefert.


--------------------
Studentenclub Count Down
The future is already here - it is just unevenly distributed. William Gibson
ProfilPM
AntwortenZitierenTOP
post 16 Apr 2008, 17:05
avatar
der vierkonsonantige
*********

Punkte: 3812
seit: 12.12.2003

und nicht vor '\n' bzw "\r\n"

scanf: "Hallo wicked!"(\0) strlen => 13
fgets: "Hallo wicked!\n"(\0) strlen => 14
ProfilPM
AntwortenZitierenTOP
1 Nutzer liest/lesen dieses Thema (1 Gäste)
0 Mitglieder: