📄 string2.h
字号:
- __s2[3]); \ } \ } \ __result; }))# define __strcmp_gc(s1, s2, l2) \ (__extension__ ({ __const unsigned char *__s1 = \ (__const unsigned char *) (__const char *) (s1); \ register int __result = \ __s1[0] - ((__const unsigned char *) \ (__const char *) (s2))[0]; \ if (l2 > 0 && __result == 0) \ { \ __result = (__s1[1] \ - ((__const unsigned char *) \ (__const char *) (s2))[1]); \ if (l2 > 1 && __result == 0) \ { \ __result = \ (__s1[2] - ((__const unsigned char *) \ (__const char *) (s2))[2]); \ if (l2 > 2 && __result == 0) \ __result = \ (__s1[3] \ - ((__const unsigned char *) \ (__const char *) (s2))[3]); \ } \ } \ __result; }))#endif/* Compare N characters of S1 and S2. */#ifndef _HAVE_STRING_ARCH_strncmp# define strncmp(s1, s2, n) \ (__extension__ (__builtin_constant_p (n) \ && ((__builtin_constant_p (s1) \ && strlen (s1) < ((size_t) (n))) \ || (__builtin_constant_p (s2) \ && strlen (s2) < ((size_t) (n)))) \ ? strcmp (s1, s2) : strncmp (s1, s2, n)))#endif/* Return the length of the initial segment of S which consists entirely of characters not in REJECT. */#ifndef _HAVE_STRING_ARCH_strcspn# define strcspn(s, reject) \ __extension__ \ ({ char __r0, __r1, __r2; \ (__builtin_constant_p (reject) && __string2_1bptr_p (reject) \ ? ((__r0 = ((__const char *) (reject))[0], __r0 == '\0') \ ? strlen (s) \ : ((__r1 = ((__const char *) (reject))[1], __r1 == '\0') \ ? __strcspn_c1 (s, __r0) \ : ((__r2 = ((__const char *) (reject))[2], __r2 == '\0') \ ? __strcspn_c2 (s, __r0, __r1) \ : (((__const char *) (reject))[3] == '\0' \ ? __strcspn_c3 (s, __r0, __r1, __r2) \ : strcspn (s, reject))))) \ : strcspn (s, reject)); })__STRING_INLINE size_t __strcspn_c1 (__const char *__s, char __reject);__STRING_INLINE size_t__strcspn_c1 (__const char *__s, char __reject){ register size_t __result = 0; while (__s[__result] != '\0' && __s[__result] != __reject) ++__result; return __result;}__STRING_INLINE size_t __strcspn_c2 (__const char *__s, char __reject1, char __reject2);__STRING_INLINE size_t__strcspn_c2 (__const char *__s, char __reject1, char __reject2){ register size_t __result = 0; while (__s[__result] != '\0' && __s[__result] != __reject1 && __s[__result] != __reject2) ++__result; return __result;}__STRING_INLINE size_t __strcspn_c3 (__const char *__s, char __reject1, char __reject2, char __reject3);__STRING_INLINE size_t__strcspn_c3 (__const char *__s, char __reject1, char __reject2, char __reject3){ register size_t __result = 0; while (__s[__result] != '\0' && __s[__result] != __reject1 && __s[__result] != __reject2 && __s[__result] != __reject3) ++__result; return __result;}#endif/* Return the length of the initial segment of S which consists entirely of characters in ACCEPT. */#ifndef _HAVE_STRING_ARCH_strspn# define strspn(s, accept) \ __extension__ \ ({ char __a0, __a1, __a2; \ (__builtin_constant_p (accept) && __string2_1bptr_p (accept) \ ? ((__a0 = ((__const char *) (accept))[0], __a0 == '\0') \ ? 0 \ : ((__a1 = ((__const char *) (accept))[1], __a1 == '\0') \ ? __strspn_c1 (s, __a0) \ : ((__a2 = ((__const char *) (accept))[2], __a2 == '\0') \ ? __strspn_c2 (s, __a0, __a1) \ : (((__const char *) (accept))[3] == '\0' \ ? __strspn_c3 (s, __a0, __a1, __a2) \ : strspn (s, accept))))) \ : strspn (s, accept)); })__STRING_INLINE size_t __strspn_c1 (__const char *__s, char __accept);__STRING_INLINE size_t__strspn_c1 (__const char *__s, char __accept){ register size_t __result = 0; /* Please note that __accept never can be '\0'. */ while (__s[__result] == __accept) ++__result; return __result;}__STRING_INLINE size_t __strspn_c2 (__const char *__s, char __accept1, char __accept2);__STRING_INLINE size_t__strspn_c2 (__const char *__s, char __accept1, char __accept2){ register size_t __result = 0; /* Please note that __accept1 and __accept2 never can be '\0'. */ while (__s[__result] == __accept1 || __s[__result] == __accept2) ++__result; return __result;}__STRING_INLINE size_t __strspn_c3 (__const char *__s, char __accept1, char __accept2, char __accept3);__STRING_INLINE size_t__strspn_c3 (__const char *__s, char __accept1, char __accept2, char __accept3){ register size_t __result = 0; /* Please note that __accept1 to __accept3 never can be '\0'. */ while (__s[__result] == __accept1 || __s[__result] == __accept2 || __s[__result] == __accept3) ++__result; return __result;}#endif/* Find the first occurrence in S of any character in ACCEPT. */#ifndef _HAVE_STRING_ARCH_strpbrk# define strpbrk(s, accept) \ __extension__ \ ({ char __a0, __a1, __a2; \ (__builtin_constant_p (accept) && __string2_1bptr_p (accept) \ ? ((__a0 = ((__const char *) (accept))[0], __a0 == '\0') \ ? NULL \ : ((__a1 = ((__const char *) (accept))[1], __a1 == '\0') \ ? strchr (s, __a0) \ : ((__a2 = ((__const char *) (accept))[2], __a2 == '\0') \ ? __strpbrk_c2 (s, __a0, __a1) \ : (((__const char *) (accept))[3] == '\0' \ ? __strpbrk_c3 (s, __a0, __a1, __a2) \ : strpbrk (s, accept))))) \ : strpbrk (s, accept)); })__STRING_INLINE char *__strpbrk_c2 (__const char *__s, char __accept1, char __accept2);__STRING_INLINE char *__strpbrk_c2 (__const char *__s, char __accept1, char __accept2){ /* Please note that __accept1 and __accept2 never can be '\0'. */ while (*__s != '\0' && *__s != __accept1 && *__s != __accept2) ++__s; return *__s == '\0' ? NULL : (char *) (size_t) __s;}__STRING_INLINE char *__strpbrk_c3 (__const char *__s, char __accept1, char __accept2, char __accept3);__STRING_INLINE char *__strpbrk_c3 (__const char *__s, char __accept1, char __accept2, char __accept3){ /* Please note that __accept1 to __accept3 never can be '\0'. */ while (*__s != '\0' && *__s != __accept1 && *__s != __accept2 && *__s != __accept3) ++__s; return *__s == '\0' ? NULL : (char *) (size_t) __s;}#endif/* Find the first occurrence of NEEDLE in HAYSTACK. */#ifndef _HAVE_STRING_ARCH_strstr# define strstr(haystack, needle) \ (__extension__ (__builtin_constant_p (needle) && __string2_1bptr_p (needle) \ ? (((__const char *) (needle))[0] == '\0' \ ? (char *) (size_t) (haystack) \ : (((__const char *) (needle))[1] == '\0' \ ? strchr (haystack, \ ((__const char *) (needle))[0]) \ : strstr (haystack, needle))) \ : strstr (haystack, needle)))#endif#if defined __USE_GNU && !defined _FORCE_INLINES# ifndef _HAVE_STRING_ARCH_strnlen__STRING_INLINE size_tstrnlen (__const char *__string, size_t __maxlen){ __const char *__end = (__const char *) memchr (__string, '\0', __maxlen); return __end ? (size_t) (__end - __string) : __maxlen;}# endif#endif#ifndef _HAVE_STRING_ARCH_strtok_r# define __strtok_r(s, sep, nextp) \ (__extension__ (__builtin_constant_p (sep) && __string2_1bptr_p (sep) \ ? (((__const char *) (sep))[0] != '\0' \ && ((__const char *) (sep))[1] == '\0' \ ? __strtok_r_1c (s, ((__const char *) (sep))[0], nextp) \ : __strtok_r (s, sep, nextp)) \ : __strtok_r (s, sep, nextp)))__STRING_INLINE char *__strtok_r_1c (char *__s, char __sep, char **__nextp);__STRING_INLINE char *__strtok_r_1c (char *__s, char __sep, char **__nextp){ char *__result; if (__s == NULL) __s = *__nextp; while (*__s == __sep) ++__s; if (*__s == '\0') __result = NULL; else { __result = __s; while (*__s != '\0' && *__s != __sep) ++__s; if (*__s == '\0') *__nextp = __s; else { *__s = '\0'; *__nextp = __s + 1; } } return __result;}# if defined __USE_POSIX || defined __USE_MISC# define strtok_r(s, sep, nextp) __strtok_r ((s), (sep), (nextp))# endif#endif#ifndef _HAVE_STRING_ARCH_strsep# define __strsep(s, reject) \ __extension__ \ ({ char __r0, __r1, __r2; \ (__builtin_constant_p (reject) && __string2_1bptr_p (reject) \ && (__r0 = ((__const char *) (reject))[0], \ ((__const char *) (reject))[0] != '\0') \ ? ((__r1 = ((__const char *) (reject))[1], \ ((__const char *) (reject))[1] == '\0') \ ? __strsep_1c (s, __r0) \ : ((__r2 = ((__const char *) (reject))[2], __r2 == '\0') \ ? __strsep_2c (s, __r0, __r1) \ : (((__const char *) (reject))[3] == '\0' \ ? __strsep_3c (s, __r0, __r1, __r2) \ : __strsep_g (s, reject)))) \ : __strsep_g (s, reject)); })__STRING_INLINE char *__strsep_1c (char **__s, char __reject);__STRING_INLINE char *__strsep_1c (char **__s, char __reject){ register char *__retval = *__s; if (__retval == NULL) return *__s = NULL; if (*__retval == __reject) *(*__s)++ = '\0'; else if ((*__s = strchr (__retval, __reject)) != NULL) *(*__s)++ = '\0'; else *__s = NULL; return __retval;}__STRING_INLINE char *__strsep_2c (char **__s, char __reject1, char __reject2);__STRING_INLINE char *__strsep_2c (char **__s, char __reject1, char __reject2){ register char *__retval = *__s; if (__retval == NULL) return *__s = NULL; if (*__retval == __reject1 || *__retval == __reject2) *(*__s)++ = '\0'; else { register char *__cp = __retval; while (*__cp != '\0' && *__cp != __reject1 && *__cp != __reject2) ++__cp; if (*__cp != '\0') { *__s = __cp; *(*__s)++ = '\0'; } else *__s = NULL; } return __retval;}__STRING_INLINE char *__strsep_3c (char **__s, char __reject1, char __reject2, char __reject3);__STRING_INLINE char *__strsep_3c (char **__s, char __reject1, char __reject2, char __reject3){ register char *__retval = *__s; if (__retval == NULL) return *__s = NULL; if (*__retval == __reject1 || *__retval == __reject2 || *__retval == __reject3) *(*__s)++ = '\0'; else { register char *__cp = __retval; while (*__cp != '\0' && *__cp != __reject1 && *__cp != __reject2 && *__cp != __reject3) ++__cp; if (*__cp != '\0') { *__s = __cp; *(*__s)++ = '\0'; } else *__s = NULL; } return __retval;}__STRING_INLINE char *__strsep_g (char **__s, __const char *__reject);__STRING_INLINE char *__strsep_g (char **__s, __const char *__reject){ register char *__retval = *__s; if (__retval == NULL) return NULL; if ((*__s = strpbrk (__retval, __reject)) != NULL) *(*__s)++ = '\0'; return __retval;}# ifdef __USE_BSD# define strsep(s, reject) __strsep ((s), (reject))# endif#endif/* We need the memory allocation functions for inline strdup(). Referring to stdlib.h (even minimally) is not allowed in any of the tight standards compliant modes. */#ifdef __USE_MISC# if !defined _HAVE_STRING_ARCH_strdup || !defined _HAVE_STRING_ARCH_strndup# define __need_malloc_and_calloc# include <stdlib.h># endif# ifndef _HAVE_STRING_ARCH_strdup# define __strdup(s) \ (__extension__ (__builtin_constant_p (s) && __string2_1bptr_p (s) \ ? (((__const char *) (s))[0] == '\0' \ ? (char *) calloc (1, 1) \ : ({ size_t __len = strlen (s) + 1; \ char *__retval = (char *) malloc (__len); \ if (__retval != NULL) \ __retval = (char *) memcpy (__retval, s, __len); \ __retval; })) \ : __strdup (s)))# if defined __USE_SVID || defined __USE_BSD || defined __USE_XOPEN_EXTENDED# define strdup(s) __strdup (s)# endif# endif#endif /* Use misc. or use GNU. */#ifndef _FORCE_INLINES# undef __STRING_INLINE#endif#endif /* No string inlines. */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -