Я освежаю свой C++ и наткнулся на любопытное поведение в отношении строк, массивов символов и нулевого символа ('\0'
). Следующий код:
#include <iostream>
using namespace std;
int main() {
cout << "hello\0there"[6] << endl;
char word [] = "hello\0there";
cout << word[6] << endl;
string word2 = "hello\0there";
cout << word2[6] << endl;
return 0;
}
производит вывод:
> t
> t
>
Что происходит за кулисами? Почему строковый литерал и объявленный массив символов хранят 't'
в индексе 6 (после внутреннего '\0'
), а объявленная строка - нет?
cout << word2
? Это может дать вам представление о том, что происходит. - person philipvr   schedule 20.07.2012cout << word2
, он бы распечаталhello
, что на самом деле не проливает свет на его проблему. - person sean   schedule 20.07.2012