Anzeige:
Ergebnis 1 bis 8 von 8

Thema: C++ >> Alles -> String, bzw. const char*

  1. #1
    Registrierter Benutzer
    Registriert seit
    18.01.2002
    Beiträge
    77

    C++ >> Alles -> String, bzw. const char*

    Hi.

    Ich weiß nicht, ob ich das richtig sehe. Vielleicht gibt´s auch ne andere Lösung.

    Ich will mit ANSI-C++ auf eine PostgreSQL-Datenbank zugreifen. Dort will ich dann, mal zum Test, mehrere Unterschiedliche Datensätze einfügen. Als Übergabe für die Befehle wird "const char*" erwartet.
    Um leichter den Befehl "zusammenstellen" zu können, nehme ich erst mal einen String und wandel dann mit c_str() in einen const char*.

    Da ich in die Datenbank auch Integer und Double eintragen möchte will ich zu dem String die entsprechenden Zahlen hinzufügen.

    Nun ist die Frage. Wie mache ich das?

    So sieht´s bisher aus (Sorry, ich bin nicht so fit in char, ich weiß nicht ob das so gesund ist, was ich da mache):

    Code:
    		string a;
    		
    		const char *c;
    		
    		for (int o=0;o<=1000;o++)
    		{
    			a = string("INSERT INTO Person VALUES (")+string("1")+string(",'Datfsdfsasedfsdfsfasgasdfgnsatz:',100545.545,")+string("2")+string(")");
    			
    			c = a.c_str();
    			
    			res = PQexec(conn, c);
    			if (PQresultStatus(res) != PGRES_COMMAND_OK)
    			{
    				cout << "Fehler " << o << endl;
    			};
    			PQclear(res);
    		};
    Dort wo string("1") und string("2") steht, sollte eigentlich die Variable o rein. Ich fange auch gerade erst mit SQL an. Vielleicht mache ich auch alles falsch...

    Danke.
    SIG kostet 19 Euro extra!

    MfG
    -Nuke-

  2. #2
    Registrierter Benutzer
    Registriert seit
    25.01.2003
    Beiträge
    222
    du kannst zb. stringstream benutzen
    Code:
    #include <sstream>
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
     double d=123.45;
     stringstream stream;
     string s;
     stream << d;
     stream >> s;
     cout << s << endl;
     return 0;
    }
    gruß
    Arthur
    ---------
    irc.mrunix.de #mrunix

  3. #3
    Registrierter Benutzer
    Registriert seit
    18.01.2002
    Beiträge
    77
    Hi.

    Bei deinem Beispiel bekomme ich nur einen "Bus error".
    SIG kostet 19 Euro extra!

    MfG
    -Nuke-

  4. #4
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Bei mir gehts wie erwünscht.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  5. #5
    Registrierter Benutzer
    Registriert seit
    25.01.2003
    Beiträge
    222
    Original geschrieben von Nuke
    Hi.

    Bei deinem Beispiel bekomme ich nur einen "Bus error".
    was für ein system, compiler ... ?

    gruß
    Arthur
    ---------
    irc.mrunix.de #mrunix

  6. #6
    Registrierter Benutzer
    Registriert seit
    18.01.2002
    Beiträge
    77
    OS X.3.2 mit gcc (GCC) 3.3 20030304 (Apple Computer, Inc. build 1495)

    Aber ich habe es schon gefunden. Ich hatte im Hintergrund noch ne Compiler-Optimierung (nunja, ne ziehmlich kranke sogar) drinnen gehabt. Das hat sich wohl nicht vertragen. Jetzt geht´s.
    SIG kostet 19 Euro extra!

    MfG
    -Nuke-

  7. #7
    Registrierter Benutzer
    Registriert seit
    18.01.2002
    Beiträge
    77
    Hi.

    Mal ne Frage. Warum funktioniert das hier:

    Code:
    #include <sstream>
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    	string s;
    
    	for (int i=0;i<=100;i++)
    	{
    	       stringstream stream;
    		stream << i;
    		stream >> s;
    		cout << s << endl;
    	}
    	return 0;
    }
    Das hier aber nicht:

    Code:
    #include <sstream>
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    	string s;
           stringstream stream;
    
    	for (int i=0;i<=100;i++)
    	{
    		stream << i;
    		stream >> s;
    		cout << s << endl;
    	}
    	return 0;
    }
    Beim oberen zeigt er 0,1,2,3,4,... usw an. Aber beim 2. nur hundertmal die 0.
    SIG kostet 19 Euro extra!

    MfG
    -Nuke-

  8. #8
    Registrierter Benutzer
    Registriert seit
    24.06.2003
    Beiträge
    486
    Du mußt den stringstream Inhalt vorher leeren,bei der ersten Variante nicht nötig,weil eh immer ein neuer erstellt wird.
    Code:
    	for (int i=0;i<=100;i++)
    	{
    		stream.str("");
    		stream.clear();
    		stream << i;
    ....

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •