text einlesen in c++ - Seite 3

Seite 3 von 4 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/text_einlesen_in_c_58680/page_3 - zur Vollversion wechseln!


xdfk schrieb am 13.12.2002 um 19:07

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 schrieb am 13.12.2002 um 19:09

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 !


semteX schrieb am 13.12.2002 um 19:37

Vivo bei deiner lösung kann ma ja nur ein zeichen speichern... des is ja ned gewollt oder?!?


Vivo schrieb am 13.12.2002 um 21:41

jep ... bei den oberen beiden is nur ein char ... bei dem letzten 2 ...


semteX schrieb am 13.12.2002 um 21:58

i hab das so verstanden als ob wer nen ganzn satz einlesn wollte


Vivo schrieb am 13.12.2002 um 22:03

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 schrieb am 13.12.2002 um 22:29

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 schrieb am 13.12.2002 um 22:38

jo eh is es :)


xdfk schrieb am 13.12.2002 um 22:46

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=- schrieb am 13.12.2002 um 23:03

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 schrieb am 13.12.2002 um 23:05

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 schrieb am 13.12.2002 um 23:08

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 schrieb am 13.12.2002 um 23:10

Zitat von Vivo
sorry stimmt ... edited ! hab das allocieren vergessen ...

wlkikiv


xdfk schrieb am 13.12.2002 um 23:13

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 schrieb am 14.12.2002 um 07:13

ich compile mim borland compiler 3.1




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026