Re[13]: Об эффективности программ
От: Pavel Dvorkin Россия  
Дата: 11.10.05 01:38
Оценка: -1
Здравствуйте, GlebZ, Вы писали:

GZ>Да уж. Действительно сильно искуственный пример.

GZ>strok — злобная функция, так как она использует static данные на уровне CRT.

Хуже. Она использует __declspec(thread). Иначе, сам подумай, что будет, если ее начнут из разных потоков вызывать


>И соответсвенно, два выполнения strtok — прямой путь к нетрадиционному сексу. Лучше всего вообще забыть о ее существовании.


Вообще да. Я свою писал

GZ>Именно. А если у кого-то была ссылка на строку, то тебе надо делать копии. Но чаще придется делать копии, из-за того что ты не можешь предположить, будет строка изменяться, или нет.


Во многих и даже очень многих могу

const char* p — и я имею право предположить, что не будет.


GZ>По крайней мере одну придется делать(и не дай бог что TestWord тоже использует strtok):



GZ>
GZ>void MyWords(const char* str)
GZ>{
GZ>   char* myString=new char[strlen(str)+1];
GZ>   strcpy(myString, str);
GZ>   p=strtok(myString,",");
GZ>   while(p)
GZ>   {
GZ>     TestWord(p);
GZ>     p = strtok(NULL,",")
GZ>   }
GZ>}
GZ>


Да зачем же ? Пусть TestWord себе благополучно эту строку исследует (например, является ли слово палиндромом). Начало — p, конец — '\0', зачем мне тут подстроки в отдельный буфер копировать, когда и на месте все ясно ?
With best regards
Pavel Dvorkin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.