c++ Fehlermeldung beim Versuch Werte in einen string zu schreiben und zu lesen?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Der Typ 'string' meint hier einen C-String, also ein mit \0 terminiertes char Array.

D.h. So klappt das nicht.

int main()
{
char buf[4096];
TIFF* tif = XTIFFOpen("C:\\Projekte\\Geotiffs\\Farbe1.tif", "r");
GTIF* gtif = NULL;
gtif = GTIFNew(tif);
GTIFKeyGet(gtif, GTCitationGeoKey, buf, 0, sizeof(buf));
/* std::string Citationkey(buf); - cout sollte auch mit dem char buffer zurecht komme */
std::cout << buf << std::endl;
XTIFFClose(tif);
}
redsky 
Fragesteller
 17.06.2022, 19:35

Das hat funktioniert. Ich war zwischendurch sogar auf der richtigen Schiene mit dem char buf[], habe aber bei der Function schlichtweg 1 geschrieben anstelle von sizeof(buf). In der Doku steht halt 1 (außer wenn der Text ein string ist). Dann hatte ich zwar keine Fehlermeldung mehr, aber hatte auch kein Ergebnis.

Aber jetzt habe ich verstanden woran es liegt. Danke dir :)

0
KarlRanseierIII  17.06.2022, 23:11
@redsky

Wenn Du das c++-fien willst, kannst Du ja alternativ ein std::array nutzen, oder einen std::vector, preallokieren und in dessen Datenbereich schreiben lassen.

Du kannst zwar bei std::string eine Preallokation durchführen, aber der Zugriff auf das interne Datenfeld ist lediglich lesend "gestattet".

1
KarlRanseierIII  17.06.2022, 23:18
@KarlRanseierIII

Ich revidiere das, es müßte sich auch mit std::string machen lassen. Wenn der const overload genuitzt wird, darf nicht verändert werden.

Solltest du die Muse haben, kannst Du es ja mal versuchen ...

1
redsky 
Fragesteller
 25.06.2022, 19:42
@KarlRanseierIII

wenn ich ein bisschen Zeit hab die Tage mache ich das bestimmt mal. Das sind wahrscheinlich die Feinheiten die mich irgendwann zu einem guten Programmierer machen. Danke für die Hilfe und Tipps :)

0

Kein Plan ich hab lange nicht mehr mit c++ gearbeitet aber es sieht aus als ob er keinen Zugriff auf den code hat warum auch immer. Ich habe mich auch in einem ganz anderen Bereich bewegt als du hier daher verstehe ich kaum was von deinem code aber vielleicht als public int schreiben? Falls das bei int und in c++ überhauot existiert, vielleicht bringe ich das mit c# durcheinander oder public/private gibt es nur in Zusammenhang mit unity?