Problem mit String/char



  • Ich verwende Dev-C++, und wollte folgendes machen:

    ein string/char von 261 zeichen wird bei jedem durchgang in eine variable x übergeben.

    dieses x wird an die vorigen x angehängt. vereinfacht also, wenn x1=A und x2=B
    wurde daraus dann y=AB , nach 10 Durchgängen wird y dann wieder geleert.

    Habe es zunächst mit char probiert und als ich für x kurze zeichenketten genommen hab gings, erst als diese 261 zeichen lange zeichenkette kam stürzte das program beim durchlaufen der schleife ab bzw. beim aufruf von sprinft.

    Habe es dann versucht mit strings zu machen, aber erfolglos.
    Die Frage ist nun, ob es ne Möglichkeit gibt, dass die chars auch bei >256 Zeichen arbeiten oder ob es für strings äquivalente funktionen zu strcat und sprintf gibt.





  • Mesio schrieb:

    Die Frage ist nun, ob es ne Möglichkeit gibt, dass die chars auch bei >256 Zeichen arbeiten

    du entscheidest doch wie gross das char array ist 😃

    char foo[1024];
    

    Mesio schrieb:

    für strings äquivalente funktionen zu strcat und sprintf gibt.

    http://www.cppreference.com/cppstring/index.html
    http://cplus.kompf.de/artikel/strings.html



  • Ein char hat nur Platz für ein einziges Zeichen - und ein char* hat soviel Platz, wie du ihm reserviert hast (wenn du da über's Ende hinausschreibst, kracht's).

    Für std::string empfehle ich dir mal einen Blick in meinen Magazin-Artikel "Stringverarbeitung in C++" - strcat() kannst du mit der Methode append() oder dem operator += nachbauen, sprintf() über Stringstreams.



  • erstmal danke für die schnellen Antworten!

    Das mit dem append hat prima geklappt, hab auch schon ein wenig gesucht wegen den stringstreams,aber leider nichts passendes gefunden.

    das ganze sollte eigentlich so gehen, dass eine url entsprechend verlängert wird

    der entsprechende sprintf code war folgender:

    sprintf( whtchar, "http://www.page.de/test/page.php?var1=%d&var2=%s", wert1,wert2);
    

    habs jetzt mit

    whtchar = "http://www.page.de/test/page.php?var1=" +wert1+ "&var2=" +wert2;"
    

    gemacht und es geht, aber weis nicht ob das die sauberste methode ist oder ob es da noch was einfacheres gibt um ggf. für wert1 und wert2 int/char variablen zuzulassen



  • Also 1:1 lässt sich der Code nicht auf Streams übersetzen - die folgen einem ganz anderen Ansatz als die printf()-Familie. Die beste Entsprechung sieht so aus:

    ostringstream str;
    str<<"http://www.page.de/test/page.php?var1="<<wert1<<"&var2="<<wert2;
    
    string address = str.str();
    


  • werde ich mal testen danke!
    aber hab jetzt ein weiteres problem durch den string funktioniert folgende funktion nicht mehr:

    hFile = InternetOpenUrl(hInternet, whtchar, NULL, INTERNET_FLAG_KEEP_CONNECTION , NULL, NULL);
    


  • Wenn du den String in einer API-Funktion wieder als char* benötigst, mußt du die Methode .c_str() verwenden.

    (wie gesagt - lies meinen Artikel zur Stringverarbeitung ;))



  • Vielen dank!
    klappt jetzt eigentlich wunderbar bis auf eine ausnahme.

    das ganze ist in einer forschleife, allerdings bleibt diese forschleife nach 12 durchgängen stehen, sobald ich diese funktion "aktiviert" habe(wenn ich sie mit // auskommentiere gehts problemlos) und ich habkeine ahnung woran das nun liegen könnte 😞

    hFile = InternetOpenUrl(hInternet, whtchar, NULL, INTERNET_FLAG_KEEP_CONNECTION , NULL, NULL);
    


  • Zeig doch mal die komplette Schleife 😉



  • etwas "konfus" ich weis 😕

    while(1){
    c++;
    wert2.append(wert1);
    
    cout << c <<endl;
    
    if(c%4==0){
    
    whtchar = "http://www.page.de/test/page.php?var1="+wert1+"&var2=" + var2;
    const char * whtit;
    whtit=whtchar.c_str();
    hInternet = InternetOpen("Wininet Example", INTERNET_OPEN_TYPE_PRECONFIG ,NULL,NULL, 0); 
    hFile = InternetOpenUrl(hInternet, whtit, NULL, INTERNET_FLAG_KEEP_CONNECTION  , NULL, NULL); 
    
    wert2="";
    }
    }
    


  • habs! musste nur die verbindung schließen 🙂

    Also nochmal Danke an alle die mir hier geholfen haben!


Anmelden zum Antworten