ソースコードライブラリ関数strtokの解釈
Source Code Library Function Strtok Interpretation
分割を行うために使用するStrtok文字列、コードを調べた、少し意味のある、分析について学ぶ。
#ifdef _SECURE_VERSION #define _TOKEN *context #else /* _SECURE_VERSION */ #define _TOKEN ptd->_token #endif /* _SECURE_VERSION */ #ifdef _SECURE_VERSION char * __cdecl strtok_s ( char * string, const char * control, char ** context ) #else /* _SECURE_VERSION */ char * __cdecl strtok ( char * string, const char * control ) #endif /* _SECURE_VERSION */ { unsigned char *str const unsigned char *ctrl = control unsigned char map[32] int count #ifdef _SECURE_VERSION /* validation section */ _VALIDATE_RETURN(context != NULL, EINVAL, NULL) _VALIDATE_RETURN(string != NULL || *context != NULL, EINVAL, NULL) _VALIDATE_RETURN(control != NULL, EINVAL, NULL) /* no static storage is needed for the secure version */ #else /* _SECURE_VERSION */ _ptiddata ptd = _getptd() #endif /* _SECURE_VERSION */ /* Clear control map */ for (count = 0 count <32 count++) map[count] = 0 /* Set bits in delimiter table */ do { map[*ctrl>> 3] |= (1 <> 3] & (1 <<(*str & 7))) && *str ) str++ string = str /* Find the end of the token. If it is not the end of the string, * put a null there. */ for ( *str str++ ) if ( map[*str>> 3] & (1 << (*str & 7)) ) { *str++ = ' ' break } /* Update nextoken (or the corresponding field in the per-thread data * structure */ _TOKEN = str /* Determine if a token has been found. */ if ( string == str ) return NULL else return string }