B
Hallo.
namespace invader schrieb:
Nimm doch einfach gcc...
OK, werde ich machen. Ich verwende ja im Moment noch g++ (ich dachte das wäre das gleiche). Ich lass mich mal überraschen, wie viel ich migrieren muss, bis von meinem Mixcode ich auf echten C-Standard komme.
namespace invader schrieb:
Ich denke schon, aber das ist C++. string gibt es in C nicht.
Och nö, dann muss ich ja doch einiges abändern. Ich hatte mich schon gefreut, dass man mit string so mehr oder weniger toll arbeiten kann... Naja, Luxus ist das Arbeiten mit Strings in C/C++ im Vergleich zu anderen Sprachen trotzdem nicht. Ich schau mal, wo ich überall Std-String nach C-String ohne Probleme wandeln kann.
namespace invader schrieb:
Was ist denn k->url überhaupt?
k->url ist ein std::string in meinem struct.
Ich weiß aber leider nicht, wie C/C++ das mit den Strings genau behandelt. In Java sind Strings abstrakte Datentypen, also Klassen und werden immer nur referenziert, nicht kopiert. Und ich befürchte, dass das in C++ auch so ist. Da mir in C/C++ aber die speichertechnischen/tiefgreifenden Grundlagen fehlen, weiß ich nicht genau, was da im Speicher passiert und wo ich vorsichtig sein muss.
Es gäbe also 2 Fälle, bei denen ich Klarheit bräuchte:
1. Fall C++: k->url ist ein std::string. Wäre dann k->url = row[1] eine String-Kopie oder nur eine Deskriptorenübertragung (Pointer-Kopie)?
2. Fall C: k->url ist ein c-string/pchar. Dann wäre doch k->url = row[1] eine Übertragung der Deskriptoren und damit äußerst problematisch wegen den Threads, oder?
Wenn nur die Deskriptoren, also der Pointer übertragen wird, muss ich den Std-String/C-String erst klonen, bevor ich ihn in k->url reinkopieren kann, sodass der Thread exakt diesen String erhält und keinen Pointer, der beim nächsten MySQL-Row verworfen wird.
Blöd ist jetzt nur, dass ich gar nicht so genau weiß, von welchem Typ row[1] ist... Ich habe schon nach MYSQL_ROW gegoogelt aber nichts genaueres daraus lesen können. Ich vermute, dass der Typ MYSQL_ROW eine Art Array ist, der C-Strings/PChar's beinhaltet. Bin mir aber nicht sicher...
// Edit: Bin nun endlich auf vollwertiges Ansi-C umgestiegen und habe C++ Aufwärtskompatibilitäts mit Compilerflags behalten
Gruß
blackdrake