text einlesen in c++
moidaschl 12.12.2002 - 16:26 2393 47
xdfk
pädagogisch wertvoll
|
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
|
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  .. du verwirrst ihn nur !
Bearbeitet von Vivo am 13.12.2002, 23:00
|
semteX
hasst die KI
|
Vivo bei deiner lösung kann ma ja nur ein zeichen speichern... des is ja ned gewollt oder?!?
|
Vivo
Dreamworker
|
jep ... bei den oberen beiden is nur ein char ... bei dem letzten 2 ...
|
semteX
hasst die KI
|
i hab das so verstanden als ob wer nen ganzn satz einlesn wollte
|
Vivo
Dreamworker
|
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
|
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
|
semteX
hasst die KI
|
jo eh is es
|
xdfk
pädagogisch wertvoll
|
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 .. 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
|
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
|
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.htmlSo, 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
|
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.. #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
|
sorry stimmt ... edited ! hab das allocieren vergessen ... wlkikiv
|
xdfk
pädagogisch wertvoll
|
schon mal auf die idee gekommen dass wir gleichzeitig beim replyen waren..  also lern zuerst coden bevor du mich blöd anredest. weitere diskussionen per pm fallst was zu sagen hast.
|
semteX
hasst die KI
|
ich compile mim borland compiler 3.1
|