Здравствуйте, 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', зачем мне тут подстроки в отдельный буфер копировать, когда и на месте все ясно ?