char* problem
-
Hi Leute.
Kann mir jemand sagen wie ich ein char* ohne ein \0 am Ende in einen mit \0 am Ende bringe.Oder wie benutz ich einen "nicht null terminierten" char* in printf ?
Schonmal danke vorab

-
Jensiboy1985 schrieb:
Hi Leute.
Kann mir jemand sagen wie ich ein char* ohne ein \0 am Ende in einen mit \0 am Ende bringe.Oder wie benutz ich einen "nicht null terminierten" char* in printf ?
Schonmal danke vorab

Du kannst keinen Nullterminierten char * an printf übergeben, da printf sonst nicht weiß, wo das Ende ist. Das ist nämlich der Sinn vom Terminierungszeichen.
Warum ist dein char * denn nicht Nullterminiert?
Übrigens sind wir hier im C++ Forum. Dort nutzt man std::string und man brauch sich darum nicht mehr kümmern:
std::string str = "Hallo, Welt!"; std::cout << str << std::endl;In C:
char buf[64]; sprintf(buf, "Hallo, Welt!\n"); printf("%s", buf);
-
Du kannst keinen Nullterminierten char * an printf übergeben
So ist das mit doppelter Verneinung. Manchmal vergisst man eine.
-
na dann terminiere ihn doch einfach
. Oder gebe ihn zeichenweise aus.
-
knivil schrieb:
Du kannst keinen Nullterminierten char * an printf übergeben
So ist das mit doppelter Verneinung. Manchmal vergisst man eine.
Und dein Beitrag hatte jetzt welchen nutzen?
-
Ich hab die Länge des Strings in ner anderen Variable. Kommt von ner externen DLL kann ich leider auch nicht ändern.
Des gleiche ist doch in folgendem Fall: Ich definier ne Struktur die ich dann aus ner Datei les z.B. so (bitte nicht auf Syntax achten :P):
struct IDStruct{ char Titel[30], char Interpret[30], char Songnummer[1] } ... IDStruct a; FileRead(FILE, &a ...Wenn ich jetzt aus der Datei les, weiss ich doch auch nicht, wo z.B. der Titel aufhört. Oder wie kann man den in so einem Fall einlesen (Ohne den Titel nochmals "rauszuschneiden") ?
-
Jensiboy1985 schrieb:
Ich hab die Länge des Strings in ner anderen Variable. Kommt von ner externen DLL kann ich leider auch nicht ändern.
Des gleiche ist doch in folgendem Fall: Ich definier ne Struktur die ich dann aus ner Datei les z.B. so (bitte nicht auf Syntax achten :P):
struct IDStruct{ char Titel[30], char Interpret[30], char Songnummer[1] } ... IDStruct a; FileRead(FILE, &a ...Wenn ich jetzt aus der Datei les, weiss ich doch auch nicht, wo z.B. der Titel aufhört. Oder wie kann man den in so einem Fall einlesen (Ohne den Titel nochmals "rauszuschneiden") ?
Du scheinst dich ja in diesem Fall mit einem speziellen Datenformat zu beschäftigen. Wie das also intern aufgebaut ist, musst du nachlesen. Vermutlich steht irgendwo die Länge der entsprechenden Daten oder sie ist immer konstant am gleichen "Ort" zu finden. Beispielsweise könnte der Titel von 0 bis 30 gehen. Das Terminierungszeichen wäre in dem Fall nicht enthalten. Also musst du ein Array mit 31 Elementen anlegen und liest die 30 Zeichen ein und setzt das 31. Zeichen auf \0.
-
ghjghj schrieb:
Du scheinst dich ja in diesem Fall mit einem speziellen Datenformat zu beschäftigen. Wie das also intern aufgebaut ist, musst du nachlesen. Vermutlich steht irgendwo die Länge der entsprechenden Daten oder sie ist immer konstant am gleichen "Ort" zu finden. Beispielsweise könnte der Titel von 0 bis 30 gehen. Das Terminierungszeichen wäre in dem Fall nicht enthalten. Also musst du ein Array mit 31 Elementen anlegen und liest die 30 Zeichen ein und setzt das 31. Zeichen auf \0.
Andererseits kann man auch einfach C++ Mittel benutzen:
http://www.cplusplus.com/reference/iostream/ostream/write/Writes the block of data pointed by s, with a size of n characters, into the output buffer. The characters are written sequentially until n have been written.
This is an unformatted output function and what is written is not necessarily a c-string, therefore any null-character found in the array s is copied to the destination and does not end the writing process.
-
... schrieb:
Und dein Beitrag hatte jetzt welchen nutzen?
Ich habe auf einen semantischen Fehler hingewiesen, den kein Compiler entdecken kann.
-
Muss ich wenn ich so ne Struktur definier dann tatsächlich alles dann nochmal mit den entsprechenden Längen auslesen ?
Irgendwie muss ich das doch auch ohne das "nochmals angeben der länge" können!? Die Länge hab ich doch in der Struktur schon festgelegt !?
-
Sind das jetzt Fragen oder Aussagen von dir? Ich bin mir bei deiner Zeichensetzung nicht so sicher. Spricht denn was gegen das schon vorgeschlagene ostream::write?