"We are back" « oc.at

text einlesen in c++

moidaschl 12.12.2002 - 16:26 2393 47
Posts

xdfk

pädagogisch wertvoll
Avatar
Registered: Sep 2000
Location: Graz
Posts: 6441
1. fall: dynamisch allokierter speicher
char *x =malloc(30*sizeof(char));
scanf("%s",x);

2. fall: statisches array
char x[50];
scanf("%s",&x);

so sollte es stimmen wenn mich nicht alles täuscht

Vivo

Dreamworker
Avatar
Registered: May 2002
Location: Tal der Könige
Posts: 1478
Es ist folgendermasen ....

Prinzipiell gibt man einen einzelnen char folgendermasen ein:

char x;
scanf("%s",&x); //mit dem &operator bekommt man die Adresse der Variable

Wenn man das ganze dynamisch macht sieht das so aus :

char *x;
x = new char; // EDITED !!
scanf("%s",x); //&operator nicht mehr nötig, weil char* bereits die Adresse enthält

Bei einem Array ist das dann folgendermasen :

char x[2]; //Es wird ein char* erzeugt der auf das erste Element zeigt und mit der Syntax x[1] ersetzt man nur *(x+1)
scanf("%s",x); //&operator nicht mehr nötig, weil die variable x die Adresse des ersten Elements enthält ...

ui, das war schön erklärlt ... :)

Edit : ah, mach das weg xdfk ... der 2te Fall ist falsch :D .. du verwirrst ihn nur !
Bearbeitet von Vivo am 13.12.2002, 23:00

semteX

hasst die KI
Avatar
Registered: Oct 2002
Location: Pre
Posts: 14876
Vivo bei deiner lösung kann ma ja nur ein zeichen speichern... des is ja ned gewollt oder?!?

Vivo

Dreamworker
Avatar
Registered: May 2002
Location: Tal der Könige
Posts: 1478
jep ... bei den oberen beiden is nur ein char ... bei dem letzten 2 ...

semteX

hasst die KI
Avatar
Registered: Oct 2002
Location: Pre
Posts: 14876
i hab das so verstanden als ob wer nen ganzn satz einlesn wollte

Vivo

Dreamworker
Avatar
Registered: May 2002
Location: Tal der Könige
Posts: 1478
OK ...

Die Lösung die ich irgendwann vorher angegeben liest einen Satz / Wort ein ... je nach länge des angegeben Strings

Das was ich unter "Es ist folgendermasen steht" dient rein nur zum allgemeinen verständnis der scanf Funktion mit Arrays

:) .....

irreversible

oberspammer
Avatar
Registered: Mar 2001
Location: 2524
Posts: 1058
vivo hats glaub i eh verständlich genug erklärt ... bzw meines wissens richtig ;)

finds nua fui cool dass ma über so was einfaches so lang diskutieren kann ... des is eines der ersten programme die ma in c schreibt wenn ma c lernt :D

semteX

hasst die KI
Avatar
Registered: Oct 2002
Location: Pre
Posts: 14876
jo eh is es :)

xdfk

pädagogisch wertvoll
Avatar
Registered: Sep 2000
Location: Graz
Posts: 6441
Zitat von Vivo
Es ist folgendermasen ....

Prinzipiell gibt man einen einzelnen char folgendermasen ein:

char x;
scanf("%s",&x); //mit dem &operator bekommt man die Adresse der Variable

Wenn man das ganze dynamisch macht sieht das so aus :

char *x;
scanf("%s",x); //&operator nicht mehr nötig, weil char* bereits die Adresse enthält

Bei einem Array ist das dann folgendermasen :

char x[2]; //Es wird ein char* erzeugt der auf das erste Element zeigt und mit der Syntax x[1] ersetzt man nur *(x+1)
scanf("%s",x); //&operator nicht mehr nötig, weil die variable x die Adresse des ersten Elements enthält ...

ui, das war schön erklärlt ... :)

Edit : ah, mach das weg xdfk ... der 2te Fall ist falsch :D .. du verwirrst ihn nur !

segmentation violation segmentation violation segmentation violation.
wenn du nur einen charpointer anlegst, aber keinen speicher allokierst bekommst in C garantiert eine segmentation violation sobald du mit scanf irgendwas an die stelle des pointers schreibst.
btw: meine beiden varianten funktionieren 100%ig (in C)

btw verwend doch cin bzw cout wenn es schon c++ ist.

btw: scanf ist sowieso eine gefährliche funktion. lern lieber den input als string abspeichern und danach ordentlich parsen.

Neo-=IuE=-

Here to stay
Registered: Jun 2002
Location: Berndorf, NÖ
Posts: 3236
hm i habs grad extra probiert, ES GEHN BEIDE varianten:
scanf("%s", &x)
scanf("%s", x)
i denk, des liegt an scanf bei verwendung von arrays, dass er des abcheckt ;)

Vivo

Dreamworker
Avatar
Registered: May 2002
Location: Tal der Könige
Posts: 1478
sorry stimmt ... edited ! hab das allocieren vergessen ...

Wenn dein 2tes Beispiel stimmen würde ist diese Referenz falsch ...
http://www.cplusplus.com/ref/cstdio/scanf.html

So, ich weiss nicht wie lange noch weiterdiskutiert wird ... aber i kann so ziemlich 100pro sagen dass das was in meine erklärungsthread (jetzt) steht stimmt ...

Edit : OK ... g0wned von Neo-=IuE=-

xdfk

pädagogisch wertvoll
Avatar
Registered: Sep 2000
Location: Graz
Posts: 6441
Zitat von Neo-=IuE=-
hm i habs grad extra probiert, ES GEHN BEIDE varianten:
scanf("%s", &x)
scanf("%s", x)
i denk, des liegt an scanf bei verwendung von arrays, dass er des abcheckt ;)

womit bitte compiliert ihr??? just ms crap?
verwendet einen standard konformen compiler..
Code:
#include <stdio.h>
int main()
{
char *x;
scanf("%s",x);
}

kompiliert mit:
gcc -Wall -pedantic -x c++ -o chartest chartest.C

ausführen mit ./chartest

liefert mir eine segmentation fault.

daher: irgendwas an eurer theorie versteh ich falsch. denn der code oben ist falsch. mein erster code ganz oben ist richtig und funktioniert.(anderes posting)

Vivo

Dreamworker
Avatar
Registered: May 2002
Location: Tal der Könige
Posts: 1478
Zitat von Vivo
sorry stimmt ... edited ! hab das allocieren vergessen ...

wlkikiv

xdfk

pädagogisch wertvoll
Avatar
Registered: Sep 2000
Location: Graz
Posts: 6441
schon mal auf die idee gekommen dass wir gleichzeitig beim replyen waren.. :rolleyes: also lern zuerst coden bevor du mich blöd anredest. weitere diskussionen per pm fallst was zu sagen hast.

semteX

hasst die KI
Avatar
Registered: Oct 2002
Location: Pre
Posts: 14876
ich compile mim borland compiler 3.1
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz