NUL-zeichen in strings
-
string bla("bl\0a", 4);
-
jo danke klappt

*closed*
-
Is aber sehr doof. Wenn du mal irgendwelche Funktionen verwenden willst die C-Strings benötigen dann hast du sowas von ein Problem...
-
neomic schrieb:
...
ist es möglich NUL-zeichen (\0 oder \x00) mitten in einen string zu stecken sodass der compiler oder das programm den ganzen string erkennt?...Ja, aber wozu ?
Vielleicht können wir Dir hier bessere Möglichkeiten nennen. Wie David schon gesagt hat, ist es unüblich und unerwartet und damit recht fehlerträchtig.
Gruß,
Simon2.
-
Es ist möglich, solange du den String nicht als C-String interpretieren willst. Und sowas ist auch üblich, um z.B. eine längere Stringliste zu übergeben (z.B. verwenden diverse WinAPI-Funktionen solche String-Folgen (ein einzelnes '\0' markiert das Ende eines Teilstrings ein doppeltes das Listenende)).
-
Naja,
Du sprichst hier von einem speziellen Protokoll ... ich sprach eher von dem, was 90% der C++Programmierer erwarten, wenn sie ".... einen String ..." hören.
Und dazu zählt z.B. auch, dass man den gefahrlos und komplett mit strncpy() in ein char[] kopieren kann (wie wir gerade im anderen Thread gesehen haben).Gruß,
Simon2 (der noch nie WinAPI programmiert hat).
-
Aber ein C++ String (sprich std::basic_string) muß nicht Null-terminiert sein. Wenn du z.B. data() aufrufst, kann dieser ohne Nullterminierung zurück gegeben werden, eben weil C++ Strings im Gegensatz zu C-Strings nicht Null-terminiert sein müssen. Können! Aber nicht müssen!
Also kann man nicht wirklich von 90-100% der Fälle sprechen. Davon geht ihr jetzt aus, weil ihr immer noch die C-Denke habt.
Wenn neomic eine \0 drin haben will, dann ist das laut std::basic_string keine Terminierung. Die Terminierung mit Null, muß allerdings bei c_str() sein! Deshalb gibts data() und c_str().
-
Es wird Dich vielleicht überraschen, aber all das wusste ich bereits.
In "meinem" Projekt arbeite ich sowohl mit "printable Strings" als auch mit nonprintables (jeweils in std::string) und freue mich über die Unterscheidung von data() und c_str().
Ich sprach nur von string::c_str() ... war doch klar, oder ?
Ich sprach davon, dass man strncpy() einsetzt und damit war für mich (im Sinne von ADL
) klar, dass es hier um die Konvertierung und das Arbeiten mit C-Strings geht. 
Artchi schrieb:
...Also kann man nicht wirklich von 90-100% der Fälle sprechen. Davon geht ihr jetzt aus, weil ihr immer noch die C-Denke habt....

Was soll das Eine mit dem Anderen zu tun haben ? Wenn 90% das erwarten, tun sie das .... egal, ob aus (in Deinen Augen) "edlen Motiven" oder nicht.Artchi schrieb:
Wenn neomic eine \0 drin haben will, ...... dann vermute ich gaaaanz stark, dass er das als Terminierung in seinen C-Strings haben will.
Weil ich das aber nicht weiß, habe ich gefragt, wozu er das braucht.Gruß,
Simon2.
-
Na, vielleicht wissen das aber die vielen anderen Threadleser nicht?

-
OK,
weil Du mich zitiert hattest, war ich der Ansicht, Du wolltest das mir persönlich mitteilen.
Sorry und frohe Weihnachten,
Simon2.