Stringübergabe an Kette geht nicht?
-
also ich hab jetzt wirklich ne ganze menge ausprobiert, aber bekomme das einfach nicht gebacken. Vielleicht hilft die Info dass der String an einen Pointer übergeben wird?
-
so habe jetzt mal bisschen weiter geforscht.
Auf jeden Fall sagt mir der Compiler, dass man nicht zwei Pointer addieren kann. Dabei will ich ja nur an den String (was ein char Pointer Array ist) weitere Zeichen hinzufügen. Merkwürdig...
jemand eine Idee.
-
Das Problem gab es erst gerade: http://www.c-plusplus.net/forum/viewtopic-var-t-is-224959.html
-
Kannst du uns sagen, von welchem Typ der dritte Parameter bei
curl_easy_setoptist? Womöglich einchar const*? Dann suchst du womöglich sowas?curl_easy_setopt(easyhandle, CURLOPT_POSTFIELDS, ("j_username=eggersson&j_password=" + pwd).c_str());http://www.cplusplus.com/reference/string/string/c_str.html
Wobei ich allerdings nicht weiss, ob die Funktion den String kopieren wird, oder verlangt, dass der Speicher vorhanden bleibt. Im zweiteren Fall, wäre das fatal.
Grüssli
PS: Wenn der Compiler eine Fehlermeldung wirft, zeigt sie uns doch bitte. Es ist mühsam, wenn man raten muss

-
Hi!
Vielen Dank für die Tips, kann ich so auch ohne Probleme kompilieren.
also: "bla"+string(pwd);
das geht schon, aber wenn ich das Programm starte stürzt es wieder ab. Hab jetzt den Debugger drüberlaufen lassen, mit dem ich mich leider nicht so gut auskenne, aber auf jeden fall sagt mir ein Fenster: "unbehandelte Ausnahme in nochmalCurl.exe (LIBCURL.DLL): 0x0000005: Access Violation."
Heißt das, dass meine Lib im Eimer ist/fehlerhaft ist. Oder dass ich einfach auf einen Speicher über eine Variable zugreife, was die Libcurl nicht mag???
Grüße
-
howdyman schrieb:
Hi!
Vielen Dank für die Tips, kann ich so auch ohne Probleme kompilieren.
also: "bla"+string(pwd);
das geht schon, aber wenn ich das Programm starte stürzt es wieder ab. Hab jetzt den Debugger drüberlaufen lassen, mit dem ich mich leider nicht so gut auskenne, aber auf jeden fall sagt mir ein Fenster: "unbehandelte Ausnahme in nochmalCurl.exe (LIBCURL.DLL): 0x0000005: Access Violation."
Heißt das, dass meine Lib im Eimer ist/fehlerhaft ist. Oder dass ich einfach auf einen Speicher über eine Variable zugreife, was die Libcurl nicht mag???
Grüße
Jo, weil du einen temporären string erstellst, und einen Zeiger auf den Anfang übergibst. Das ist das Problem. Mach den string ausserhalb und setze ihn zusammen, wie du willst und dann mache in der Funktion drin als übergabe .c_str().
-
Ok danke, das funktioniert, aber wenn ich mein username und passwort aus einer Datei auslese, scheint das nicht zu funktionieren. Hier meine Funktion zum Erstellen des Strings:
string retusrpwd() { pwd=fgets(Puffer,260,Wordlist); usrpwd="j_username=eggersson&j_password="+string(pwd); cout<<usrpwd.c_str(); return usrpwd; }und hier übergebe ich das ganze:
curl_easy_setopt(easyhandle, CURLOPT_POSTFIELDS,retusrpwd().c_str());wenn ich in obiger Funktion statt:
pwd=fgets(Puffer,260,Wordlist);folgendes mache:
pwd="meinpw";//fgets(Puffer,260,meinepwdatei);dann funktioniert das wunderbar und mein
Programm sagt mir auch, dass der login korrekt war.
Wenn ichs aus einer Datei auslese scheint da was nicht zu gehen,
denn mein Programm sagt mir, dass das PW falsch ist.An was liegt das?
-
immer noch aktuell. keien Lösung gefunden. kann es sein, dass c_str() aus meinem string was andres bastelt??
-
Da hast du dein Problem:
http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTPOSTFIELDSDie Daten müssen aufbewahrt werden, bis curl diese nicht mehr benötigt. Wieso das eine ging und das andere nicht, könnte ein reiner Zufall sein, denn du löst hier undefiniertes Verhalten aus. Der Speicher, auf welcher zugegriffen wird, wurde gelöscht. Du musst den Speicher also erhalten, bis curl diesen nicht mehr benötigt.
Grüssli
PS: Wieso benutzt du nicht die C++ Filestreams?
-
Das heißt also ich muss schon vor dem Programmstart den Speicher für Curl festlegen?
Was wäre der Unterschied zu Filestreams? (habe damit noch nie gearbeitet).
Wie könnten sie mein Problem lösen?Grüße
-
howdyman schrieb:
Das heißt also ich muss schon vor dem Programmstart den Speicher für Curl festlegen?
Nein, du musst einfach den Speicher aufbewahren, bis du den Transfer erledigt hast. Steht alles in der Dokumentation. Lies zum Beispiel mal den Link, den ich dazugefügt habe.
howdyman schrieb:
Was wäre der Unterschied zu Filestreams? (habe damit noch nie gearbeitet).
Wie könnten sie mein Problem lösen?Dein Problem können diese nicht lösen. Nur ist es üblich, dass man in C++ mit C++ programmiert und in C mit C. Du vermischst hier C und C++ und davon rattet man ab, da es zu Fehlern führen kann. Wenn du noch nie mit Filestreams gearbeitet hast, dann solltest du vielleicht mal ein sinnvolles Tutorial zu C++ durchmachen oder aber gleich ein Buch kaufen, welches dir eine gute Einführung gibt. Als Bücher wären hier wohl vor allem den C++ Primer und Thinking in C++ 1&2 zu nennen.
Grüssli
-
Jo, ich versteh zwar, was gemeint ist mit "Speicher aufbewahren", aber wie ich es im Programm umsetzte? keine Ahnung

Zum 2ten. : Recht hast du, werde mal sehen, dass ich mir noch ein vernünftiges Buch besorge... danke schonmal für die Tipps,
würde trotzdem gerne wissen, wie ich den speicher "aufbewahre".
Grüße
-
Jo, ich versteh zwar, was gemeint ist mit "Speicher aufbewahren", aber wie ich es im Programm umsetzte? keine Ahnung

Zum 2ten. : Recht hast du, werde mal sehen, dass ich mir noch ein vernünftiges Buch besorge... danke schonmal für die Tipps,
würde trotzdem gerne wissen, wie ich den speicher "aufbewahre".
Grüße
-
so, habe jetzt versucht, die setopt Funktion in einem CURLcode Array zu speichern und per Inkrement quasi mitlaufen zu lassen. Funktioniert aber genausowenig. Ich finde es schon merkwürdig, da das Programm ja läuft, wenn ich ihm einen direkten String gebe. Über die Funktion ist es ja nichts anderes, also Rückgabewert habe ich ja auch einen string.
Erschließt sich mir nicht.
jede Hilfe Willkommen

-
Dann mach mal ne globale und schau, was damit gemacht wird..
-
jo, das mit der Globalen hab ich auch schon versucht. Hilft alles nichts
naja, schade eigentlich. Habe gestern bisschen in der WinHTTP API gelesen und damit kann ich ja eigentlich auch einen POST request schicken. Vielleicht funktionierts ja damit. Versuche es jedenfalls mal wenn ich daheim bin, hehe.
-
*kopf schüttelt*
Was ist denn daran bitte so schwer?void foo() { std::string temp = retusrpwd(); // Wir heben den Speicher auf. // ... curl_easy_setopt(easyhandle, CURLOPT_POSTFIELDS, temp.c_str()); // Setzen ihn. // ... curl_easy_perform(easyhandle); // Benutzen ihn. // Und temp Speicher darf freigegeben werden. }Dir scheint echt viel Grundverständnis in C++ zu fehlen. Ich rate dringend zu einem dieser Bücher, sonst verrennst du dich andauernd komplett.
Es gäbe im übrigen nämlich auch noch eine CURL Bibliothek für C++, bzw. einen Wrapper:
http://curl.haxx.se/libcurl/cplusplus/
http://rrette.com/textpattern/index.php?s=cURLppGrüssli