Размер строки нежелательный вывод - PullRequest
1 голос
/ 01 февраля 2012

Я не могу найти ошибку в этом небольшом фрагменте кода. что с ним не так?

string f,s;
f[0] = 'd';
s.append(f);
cout<<f.length()<<"  "<<f<<"  "<<f[0]<<endl;
cout<<s.length()<<"  "<<s<<"  "<<s[0]<<endl;  
Output is : 
0    d
0    d

Даже если я изменю s.length на s.size, результат будет таким же. Почему s[0] = 'd' и s.size() = 0;?

1 Ответ

5 голосов
/ 01 февраля 2012

Обе строки пусты при создании, они не содержат символов. f[0] выходит за пределы, и доступ к любому элементу пустого контейнера является неопределенным поведением, поэтому все может быть законно.

Вам нужно сделать

string f(1, 'd'), s; // creates f with 1 repetition of 'd'
s.append(f);
...

Или

string f, s;
f += 'd'; // or f.push_back('d'), or f.append('d'), or...
s.append(f);
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...