|
You last visited: Today at 02:04
Advertisement
C++ IOStream Problem
Discussion on C++ IOStream Problem within the C/C++ forum part of the Coders Den category.
03/08/2010, 22:07
|
#1
|
elite*gold: 0
Join Date: Apr 2009
Posts: 793
Received Thanks: 366
|
C++ IOStream Problem
Ok nach einer halben Stunde "WTF" und "Bücher hastig rausgraben" bin ich nun langsam am verzweifeln.
Code:
#include <windows.h>
#include <iostream>
using namespace std;
int main(){
char* text;
char* caption;
cin >> text >> caption;
MessageBox(NULL,text,caption,MB_OK);
}
Das ist mein Code, der eine dynamische MsgBox erstellen soll. Das Problem liegt an der IOStream. Sobal die zweite Variable per CIN gesetzt wird, nimmt die Variable "text" auch den gleichen Wert an.
|
|
|
03/08/2010, 22:29
|
#2
|
elite*gold: 0
Join Date: Nov 2008
Posts: 161
Received Thanks: 38
|
Deine Zeiger zeigen auf keinen Speicher!
Nimm die Stringklasse (std::string).
|
|
|
03/08/2010, 22:31
|
#3
|
elite*gold: 20
Join Date: Jul 2004
Posts: 5,468
Received Thanks: 1,993
|
Quote:
Originally Posted by flo8464
Deine Zeiger zeigen auf keinen Speicher!
Nimm die Stringklasse (std::string).
|
string reicht , er hat ja std schon als namespace deklariert
|
|
|
03/08/2010, 22:32
|
#4
|
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,878
|
Quote:
Originally Posted by Xereon
Ok nach einer halben Stunde "WTF" und "Bücher hastig rausgraben" bin ich nun langsam am verzweifeln.
Code:
#include <windows.h>
#include <iostream>
using namespace std;
int main(){
char* text;
char* caption;
cin >> text >> caption;
MessageBox(NULL,text,caption,MB_OK);
}
Das ist mein Code, der eine dynamische MsgBox erstellen soll. Das Problem liegt an der IOStream. Sobal die zweite Variable per CIN gesetzt wird, nimmt die Variable "text" auch den gleichen Wert an.
|
Da du die Aufgabe , wie mir scheint , mit C-Strings lösen willst , wäre das eine Möglichkeit das Problem zu lösen .
Code:
int main()
{
char text[1024];
char caption[1024];
scanf("%s%s",text,caption);
MessageBox(NULL,text,caption,MB_OK);
}
|
|
|
03/08/2010, 23:04
|
#5
|
elite*gold: 0
Join Date: Nov 2008
Posts: 161
Received Thanks: 38
|
Quote:
Originally Posted by djpromo
string reicht , er hat ja std schon als namespace deklariert
|
Ich wollte ihn darauf hinweisen, dass ich die Klasse 'string' aus dem Namespace 'std' meine. Gibt ja mehr als eine Klasse zum Wrappen von Strings
|
|
|
03/09/2010, 07:40
|
#6
|
elite*gold: 0
Join Date: Apr 2009
Posts: 793
Received Thanks: 366
|
Danke für eure Antworten, doch als ich gestern mich zu Bett legte kam mir die Antwort von selber wie eine Granate. Ich habe vergessen, den Pointer auf ein char Array zeigen zulassen und so hat er durch die Zuweisung cin>>text bzw cin>>caption auf den Inputstream an sich gezeigt.
Jetzt geht es:
Code:
#include <windows.h>
#include <iostream>
using namespace std;
int main(){
char* text = new char[10];
char* caption = new char[10];
cin >> text >> caption;
MessageBox(NULL,text,caption,MB_OK);
}
|
|
|
03/09/2010, 15:52
|
#7
|
elite*gold: 0
Join Date: Nov 2008
Posts: 161
Received Thanks: 38
|
Darauf habe ich dich im ersten Post schon hingewiesen
Auch wenn das nur ein Snippet ist, gib bitte den Speicher frei ! (Und zwar mit delete[] und nicht mit delete)
|
|
|
03/11/2010, 21:34
|
#8
|
elite*gold: 99
Join Date: Oct 2008
Posts: 2,708
Received Thanks: 1,726
|
Quote:
Originally Posted by flo8464
Deine Zeiger zeigen auf keinen Speicher!
Nimm die Stringklasse (std::string).
|
Hmm ich lese ständig "Benutze std::string! Auf keinen Fall char*!"..
Was ist denn der Vorteil, wenn ich std::string benutze?? Meiner Erfahrung nach kommt man damit nicht weit, weil 99% der Funktionen nur char als Parameter akzeptiert..
Dann muss man die strings dann doch jedes mal aufs neue umwandeln, oder?
|
|
|
03/11/2010, 21:41
|
#9
|
elite*gold: 0
Join Date: Nov 2009
Posts: 136
Received Thanks: 24
|
c_str ftw!
|
|
|
03/11/2010, 22:48
|
#10
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
|
Quote:
Originally Posted by Frezee
Hmm ich lese ständig "Benutze std::string! Auf keinen Fall char*!"..
Was ist denn der Vorteil, wenn ich std::string benutze?? Meiner Erfahrung nach kommt man damit nicht weit, weil 99% der Funktionen nur char als Parameter akzeptiert..
Dann muss man die strings dann doch jedes mal aufs neue umwandeln, oder?
|
quatsch.
1. speicherallozierung und speicherbereinigung wird von der klasse übernommen
2. es gibt viele konvertierungsmöglichkeiten
3. für funktionen, die const char* brauchen gibts die methode c_str()
4. von welchen funktionen redest du bitte? o.O vielleicht von den C Std Funktionen, aber wohl nicht von den C++ Std Funktionen
5. selbst wenn fast immer const char* gebraucht werden würde, ist es zu umständlich immer const char* zu nutzen. denk mal einfach mal daran, dass du bei const char* immer auf die länge des buffers achten musst und damit auch nicht sehr flexibel bist
6. dann hast du anscheinend ziemlich schlechte erfahrungen, denn man kommt wie schon beschrieben, sehr wohl sehr weit, auch wenn nur const char* akzeptiert wird; wie gesagt, es ist einfach sicherer und komfortabler
7. char* schon mal gar nicht, wie gesagt const char* wird häufig akzeptiert, aber nicht in 99%
|
|
|
03/12/2010, 14:00
|
#11
|
elite*gold: 0
Join Date: Nov 2008
Posts: 161
Received Thanks: 38
|
Quote:
Originally Posted by Frezee
Hmm ich lese ständig "Benutze std::string! Auf keinen Fall char*!"..
Was ist denn der Vorteil, wenn ich std::string benutze?? Meiner Erfahrung nach kommt man damit nicht weit, weil 99% der Funktionen nur char als Parameter akzeptiert..
Dann muss man die strings dann doch jedes mal aufs neue umwandeln, oder?
|
std::string verwaltet intern ein char array, von daher ist das kein Problem.
|
|
|
03/12/2010, 15:16
|
#12
|
elite*gold: 20
Join Date: Oct 2006
Posts: 1,002
Received Thanks: 1,462
|
Dennoch sind C-Strings effizienter...
Und auch nicht unbedingt komplizierter, wenn man sie ins kleinste Detail kennt.
Im Prinzip soltle das jeder selbst entscheiden, ist es kein Nachteil, c-Strings zu nehmen!
|
|
|
03/12/2010, 16:13
|
#13
|
elite*gold: 0
Join Date: Nov 2008
Posts: 161
Received Thanks: 38
|
Quote:
Originally Posted by Tom94
Dennoch sind C-Strings effizienter...
Und auch nicht unbedingt komplizierter, wenn man sie ins kleinste Detail kennt.
Im Prinzip soltle das jeder selbst entscheiden, ist es kein Nachteil, c-Strings zu nehmen! 
|
Ein dynamisch allozierter C-String ist nicht das kleinste bischen effizienter als ein std::string.
Wenn er auf dem Stack liegt, ja, aber der Unterschied ist minimal, es lohnt sich nicht.
|
|
|
03/12/2010, 17:04
|
#14
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
|
Quote:
Originally Posted by Tom94
Dennoch sind C-Strings effizienter...
Und auch nicht unbedingt komplizierter, wenn man sie ins kleinste Detail kennt.
Im Prinzip soltle das jeder selbst entscheiden, ist es kein Nachteil, c-Strings zu nehmen! 
|
ähm niemand sagte komplizierter, sondern von der produktivität her ineffizienter 
außerdem ist std::string auf dauer gesehen und in großen codes sicherer^^
und wenn du unbedingt irgendeine eigene methode nutzen willst, kannste das ja auch in eine klasse stecken, aber mit einem puren c-string zu arbeiten, finde ich auf dauer zu nervig
|
|
|
03/13/2010, 08:41
|
#15
|
elite*gold: 20
Join Date: Oct 2006
Posts: 1,002
Received Thanks: 1,462
|
Quote:
Originally Posted by MrSm!th
ähm niemand sagte komplizierter, sondern von der produktivität her ineffizienter 
außerdem ist std::string auf dauer gesehen und in großen codes sicherer^^
und wenn du unbedingt irgendeine eigene methode nutzen willst, kannste das ja auch in eine klasse stecken, aber mit einem puren c-string zu arbeiten, finde ich auf dauer zu nervig
|
Ich sage ja nicht, dass C-Strings besser wären.
Wenn man jedoch ein erfahrener Programmierer ist, ist es absolut kein Problem auch reine C-Strings zu verwenden...
|
|
|
All times are GMT +1. The time now is 02:04.
|
|