Gibt es einen sicheren Weg, um zu behaupten, ob eine String -Ansicht null beendet ist?

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Gibt es einen sicheren Weg, um zu behaupten, ob eine String -Ansicht null beendet ist?

by Anonymous » 04 Mar 2025, 02:22

Ich habe einen Teil in meinem Code, der die String -Ansicht ausgiebig verwendet. Es wäre unvorstellbar, std :: String < /code> überall zu verwenden, und char const*< /code> funktioniert nicht, da es assoziative Container gibt, viele Vergleiche und solche Operationen, die mit einfachen rohen Zeichenfolgen schwer zu tun haben.auto sv = std::string_view{/* ... */};
c_api(sv.data());
< /code>

Obwohl dies in meinem Fall einwandfrei funktioniert, würde ich sicher sein, dass alles in Ordnung ist und behaupten, dass die Zeichenfolgen null beendet sind, da mein System die String -Ansichten erstellt und sie dort keine Substring -Ansichten verwendet und entweder aus String -Literalen oder Std ::: String < /code> erstellt. Ich weiß, dass es mir gut gehen werde. Eine nicht null -terminierte String ist schlecht, da er zu undefiniertem Verhalten führt, aber eine Substring in der Saitenansicht ist noch schlechter, da die Obergrenze nicht angewendet wird, wenn sie an die C -API gesendet wird und kein undefinedes Verhalten aufgerufen wird, aber stattdessen wird ein wirklich schwerer Fehler mit einem unbeabsichtigten Verhalten vorgestellt.auto sv = std::string_view{/* ... */};
assert(*(sv.data() + sv.length()) == '\0'); // Yay?
c_api(sv.data());
< /code>

, aber ich finde es unvollständig und fehleranfällig, da es aus einer NULL -Kündigungsfolge ausgelesen wird.>

Top