Ich habe ein Problem, bei dem die Größe der Zeichenfolge durch das Vorhandensein eines '\0'
Zeichens beeinflusst wird. Ich habe überall in SO gesucht und konnte die Antwort immer noch nicht bekommen.
Hier ist der Ausschnitt.
int main()
{
std::string a = "123123\0shai\0";
std::cout << a.length();
}
Die Ausgabe in diesem Fall ist
6
Wobei als das gleiche Programm mit einer anderen Zeichenfolge Ziffern anstelle von Zeichen
int main()
{
std::string a = "123123\0123\0";
std::cout << a.length();
}
gibt eine Ausgabe von
8
Was genau passiert unter der Haube? Wie verändert die Anwesenheit eines '\0'
Charakters das Verhalten?
Die Sequenz, \012
wenn sie in einem String- (oder Zeichen-) Literal verwendet wird, ist eine oktale Escape-Sequenz. Dies ist die Oktalzahl, 12
die dem ASCII-Zeichen linefeed ( '\n'
) entspricht.
Das bedeutet, dass Ihre zweite Zeichenfolge tatsächlich gleich ist "123123\n3\0"
(plus dem tatsächlichen Zeichenfolgenliteral-Terminator).
Es wäre sehr klar gewesen, wenn Sie versucht hätten, den Inhalt der Zeichenfolge zu drucken.
Oktalsequenzen sind ein bis drei Stellen lang, und der Compiler verwendet so viele Stellen wie möglich.
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen