probleme mit string und printf

adgadsfdsfdasf

Grünschnabel
hi,

ich hab mal ne frage zu string und die ausgabe mit printf, bei mir haut des einfach net hin, es geht nur mit cout und cin, mach ich was falsch oder warum geht das:

mit cout alles ausgegeben wird was ich eingebe
Code:
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <string>
using namespace std;

void main(void)
{
	string h;

	cin >> h;
	cout << h;
	
	getch();
}

und mit printf überhaupt nicht?

Code:
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <string>
using namespace std;

void main(void)
{
	string h;

	scanf("%s", &h);
	printf("%s", h);
	
	getch();
}

PS: entschuldigung für den dummen benutzernamen, aber alles war schon vergeben und da hab ich einfach mal auf die tasten gedrückt^^
 
Hi lasse das Referenzzeichen bei "scanf" weg dann sollte es gehen, andernfalls müsste eine Exception kommen. Das hängt wohl damit zusammen das bei dem Datentyp String kein Speicher "vorreserviert" wird und somit die Adresse von h noch nicht exisitert ?
Wenn du stattdessen den Datentyp char benutzt dann geht es mit der Referenz.

mfg
 
Hi aasdfadf...:D,

leider gibt es im "alten C#" keinen Datentyp string.
Da musst du es mit dem Datentyp char machen und mit einem Array:

Code:
#include <stdio.h>
#include <conio.h>

int main()
{
   char h[10];
   scanf("%s", h);
   printf("%s", h);

   getch();
   return 0;
}
Greetzz Snook
 
Hi.
Hi lasse das Referenzzeichen bei "scanf" weg dann sollte es gehen, andernfalls müsste eine Exception kommen. Das hängt wohl damit zusammen das bei dem Datentyp String kein Speicher "vorreserviert" wird und somit die Adresse von h noch nicht exisitert ?
Sorry, aber das ist einfach nur kompletter Bullsh*t.

@adgadsfdsfdasf: Du solltest dich entscheiden: Entweder du nimmst C++ und benutzt die std::string Klasse und cin/cout oder du programmierst in C und verwendest C-Strings (also char*) mit den entsprechenden Eingabe/Ausgabefunktionen. Ein std::string und printf bzw. scanf passen einfach nicht zusammen, da C logischerweise keine Klassen kennt.

SNOOK99 hat gesagt.:
leider gibt es im "alten C#" keinen Datentyp string.
Es geht hier aber nicht um C#. Und sowas wie ein altes C# gibt es nicht. Es geht um C++ und C. Und nein, C# und C++ ist nicht dasselbe.

Gruß

PS: Du kannst einen std::string als "const char*" konvertieren und dann auch mit printf o.ä. Funktionen ausgeben:
C++:
string x;

printf("%s\n", x.c_str());
Aber die Verwendung der C++ Eingabe/Ausgabestreams ist in der Regel vorzuziehen.
 
Zuletzt bearbeitet:
@deep Ich will ja nicht streiten aber ich habe ein Fragezeichen gesetzt also ist dies keine Aussage und das was ich gesagt habe funktioniert ... Auch wenn du Recht hast mit der Entscheidung C/C++...
 
Damit meine ich, dass sein 2.Quellcode bei mir mit Borland C++ 6
Konsolenprogramm C++

ohne den Ampersand im scanf funktioniert = Kompilieren + Ausführen ohne Fehlermeldung...
 
Damit meine ich, dass sein 2.Quellcode bei mir mit Borland C++ 6
Konsolenprogramm C++

ohne den Ampersand im scanf funktioniert = Kompilieren + Ausführen ohne Fehlermeldung...
Ja, das ist dann pures Glück und reiner Zufall. Wenn du den Aufruf ohne Ampersand machst, wird das string Objekt als (irgendeine) Adresse interpretiert wo dann die eingelesene Zeichenkette gespeichert wird. In der Regel wird das Programm an der Stelle abstürzen. Und bei mir tut es das zum Glück auch. Das zeigt mal wieder wie fehleranfällig diese Art der Ein/Ausgabe ist wenn man sich nicht wirklich überlegt was passiert und das die strengere Typprüfung in C++ eine gute Sache ist.

Gruß
 

Neue Beiträge

Zurück