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.>
Gibt es einen sicheren Weg, um zu behaupten, ob eine String -Ansicht null beendet ist? ⇐ C++
-
- Similar Topics
- Replies
- Views
- Last post
-
-
Fluentasserungen, die mehrere Eigenschaften eines einzelnen Objekts behaupten
by Anonymous » » in C# - 0 Replies
- 7 Views
-
Last post by Anonymous
-