yms: (Default)
[personal profile] yms
Решил скомпилить на VS2005 некий староватый код. Получил сообщение, что strtok deprecated.

Date: 2005-06-17 11:36 am (UTC)
From: [identity profile] kva.livejournal.com
ага. а если его скомпилить в msvc, то он скомпилируется, но работать не будет там то же количество аргументов тех же типов, а результат другой. может это правда и не strtok, но какая-то функция из того же семейства.

Date: 2005-06-17 11:51 am (UTC)
From: [identity profile] yms.livejournal.com
это про тот же 2005? всё прекрасно работает, но ругается, что deprecated. просто взамен этого ввели strtok_s с дополнительным параметром char**, сохраняющим контекст. Давно пора, только мало кто уже пользуется этими функциями напрямую.

Date: 2005-06-17 12:16 pm (UTC)
From: [identity profile] kva.livejournal.com
нет, я про то, что в man strtok написано posix и

char *strtok(char *s, const char *delim);

The first call to strtok() should have s as its first argument. Subsequent calls should have the first argument set to NULL.

а в msdn (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_strtok.2c_.wcstok.2c_._mbstok.asp) написано

char *strtok( char *strToken, const char *strDelimit );

Each call modifies strToken by substituting a NULL character for each delimiter that is encountered.

компилируется одинаково, а работает по-разному. отлаживать можно два дня - лично проверял. :-)

Date: 2005-06-17 12:19 pm (UTC)
From: [identity profile] kva.livejournal.com
нет, я не прав - разница все-таки еще где-то. сейчас проверю.

Date: 2005-06-17 12:22 pm (UTC)
From: [identity profile] yms.livejournal.com
Описания друг другу не противоречат, надо сказать.

Date: 2005-06-17 12:24 pm (UTC)
From: [identity profile] kva.livejournal.com
strsep. и в текущем msdn его использовать не рекомендуют.

Date: 2005-06-17 12:25 pm (UTC)
From: [identity profile] kva.livejournal.com
они дальше совпадают. просто это не posix, а ansi. а strsep - BSD 4.4

давно это было - но подобный глюк я надолго запомню.

Date: 2005-06-17 12:28 pm (UTC)
From: [identity profile] yms.livejournal.com
первый раз про такую функцию слышу, или забыл. в msvc ее нет. текущий msdn - это какой?

Date: 2005-06-17 12:29 pm (UTC)
From: [identity profile] kva.livejournal.com
да, и я говорю не про совместимость vs2005 с предыдущими версиями, а скорее про совместимость компиляторов от ms со стандартами (особенно юниксовыми)

милая шутка у них тогда получилась.

Date: 2005-06-17 12:32 pm (UTC)
From: [identity profile] kva.livejournal.com
первая ссылка от google на msdn +strsep

а вообще - полезная функция.

char *strsep(char **stringp, const char *delim);

If *stringp is NULL, the strsep() function returns NULL and does nothing else. Otherwise, this function finds the first token in the string *stringp, where tokens are delimited by symbols in the string delim. This token is terminated with a ‘\0’ character (by overwriting the delimiter) and *stringp is updated to point past the token.

Date: 2005-06-17 12:41 pm (UTC)
From: [identity profile] yms.livejournal.com
strsep таки в VC нет, он в каком-то портирующем SDK есть.

Date: 2005-06-17 12:44 pm (UTC)
From: [identity profile] kva.livejournal.com
она была в предыдущих версиях msvc (5.0 ?)
Page generated Mar. 24th, 2026 02:47 am
Powered by Dreamwidth Studios