Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » sprintf verhält sich merkwürdig (oder doch nicht?)

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
25.08.2006, 20:06 Uhr
Yadgar



High!

Folgender Code:


C++:
struct A
{
   int i;
   double d;
};

struct B
{
   string s;
};

B fromAToB (const A&);

B fromAToB (const A& a_in)
{
   cout << "Typwandlung per Funktion!" << endl;
   B result;
   char buf[32];
   sprintf(buf, "i: %i, d: %f", a_in.i, a_in.d);
   result.s = buf;
}

int main()
{
   A a;
   a.i=34;
   a.d=0.00214;
  
   B b;

   b = fromAToB(a);
  
   cout << b.s << endl;
  
   getchar();
}



...mit meinem Immer-noch-Anfänger-Verstand (ab wann ist man eigentlich kein Anfänger mehr? Vorgestern Nacht habe ich zum ersten Mal in C++ geträumt...) vermute ich mal, dass der Inhalt der beiden Mitgliedsvariablen von a in der Funktion fromAToB in einen String geschrieben wird, der auf dem Bildschirm angezeigt etwa so aussehen müsste:

i: 34, d: 0.00214

- stattdessen bekomme ich zwei DOS-Fensterseiten lang kryptischen Zeichensalat, \b-Piepton inbegriffen... wie kann das sein? Liegt es daran, dass für beide "Klassen" weder Konstruktoren noch Zuweisungsoperatoren programmiert sind?
Wenn ich b gleich mit fromAToB(a) initialisiere, wird gar nichts angezeigt (außer der Testausgabe am Beginn der Funktion), stattdessen scheint das Programm in eine Endlosschleife hineinzulaufen, die nach etwa 5 Sekunden abgebrochen wird.

Am nicht vorhanden "const" in der Deklaration von a kann es nicht liegen, das Verhalten ist ohne const in der Parameterliste von fromAToB genau gleich!

Irgendeine Idee?

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.08.2006, 21:33 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


result existiert nach dem durchlauf der mehtode nicht mehr. Ein return wäre angebracht... komisch das dein kompiler das überhaupt gefressen hat...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.08.2006, 22:23 Uhr
Yadgar




Zitat von Windalf:
result existiert nach dem durchlauf der mehtode nicht mehr. Ein return wäre angebracht... komisch das dein kompiler das überhaupt gefressen hat...






*anKopfklatsch*

Natürlich!!! Ich wunderte mich bei früherer Gelegenheit sowieso schon einmal, dass gcc return-lose Funktionen mit Rückgabetyp durchgehen läßt...

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.08.2006, 23:10 Uhr
~Blubber2063
Gast


Das liegt daran weil du offensichtlich ohne -Wall (Warnings all) compilierst, da würde er dir das an den Kopf klatschen. Kann auch sein wenn du ohne -ansi compilierst, früher war ne Menge unsinn ohne Warning erlaubt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
25.08.2006, 23:37 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Wobei der Code oben sowieso ziemlich pervers ist...
schon mal über stringstreams nachgedacht statt über irgendwelche komischen char-arrays was in nen std::string zu quetschen?
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: