2013-12-09 1 views
-4

Я пытаюсь добавить строку «\ r \ n» до 5000 раз в другой строке. Я пытаюсь какКак добавить 5000 строк строки в другую строку.?

CStringW str1 = L""; 
for(int i=0; i<5000; i++) 
{ 
str1 = str1 + L"\r\n"; 
} 

Кажется, что он отлично работает в режиме отладки и режиме выпуска Windows XP VS 6.0. Он также работает в режиме отладки в Windows 7. Но в некоторых случаях в Windows 7 он разбивается при добавлении.

Любая идея? В каком смысле мне нужно добавить.

Спасибо,

+1

Я не вижу причин, почему это должно произойти. – xMRi

+0

Это только сбой в окнах 7 ... почему? – user2499879

+0

Я бы использовал 'GetBuffer' для предварительного выделения пространства для всей строки. Если он рушится от фрагментации кучи или что-то в этом порядке (маловероятно, но, я полагаю, возможно) это, вероятно, уменьшит или устранит проблему. –

ответ

-3

Возможно, эта линия:

str1 = str1 + "\r\n"; 

Должен быть изменен на:

str1 = str1 + L"\r\n"; 

Может быть что-то странное происходит с различной шириной символов. В противном случае я не уверен, почему эта программа потерпит крах.

+0

Могу ли я объяснить причину, почему это было отклонено? –

+1

Он был занижен за то, что был неправ. ['CString :: operator + ='] (http://msdn.microsoft.com/en-us/library/ws50yfk5.aspx) преобразует различные кодировки символов. Обе линии являются законными и имеют одинаковый результат. Это не ответ. – IInspectable

+0

Это не ответ, а скорее попытка ответить. В следующий раз я буду лучше, чтобы быть совершенным. Благодарю. –

-2

Я не побеждаю программиста, поэтому я не использую эти классы, но вижу, что вы писали «иногда он падает». это заставляет меня угадать, это проблема памяти. Я бы попытался использовать что-то вроде GetBufferSetLength() перед запуском append и проверить, что я действительно получил указатель. (Я думаю, это похоже на резерв())

+0

Я хотел бы знать, что не так с этим ответом, если можно. Я посмотрел на дублированный вопрос, и нет ответа или каких-либо признаков того, что не так. – yosim

+0

не спекулируете на предмет, который вы не знаете в ответе. Я думаю, что это нормально в комментариях. – manuell