Systemnahe Programmierung in Chome Systemnahe Programmierung in C: string.h Prof. Dr. Uwe Schmidt FH Wedel

string.h

weiter

weiter

string.h

   1/* Copyright (C) 1991-1993, 1995-2004, 2007 Free Software Foundation, Inc.
   2   This file is part of the GNU C Library.
   3
   4   The GNU C Library is free software; you can redistribute it and/or
   5   modify it under the terms of the GNU Lesser General Public
   6   License as published by the Free Software Foundation; either
   7   version 2.1 of the License, or (at your option) any later version.
   8
   9   The GNU C Library is distributed in the hope that it will be useful,
  10   but WITHOUT ANY WARRANTY; without even the implied warranty of
  11   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  12   Lesser General Public License for more details.
  13
  14   You should have received a copy of the GNU Lesser General Public
  15   License along with the GNU C Library; if not, write to the Free
  16   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  17   02111-1307 USA.  */
  18
  19/*
  20 *      ISO C99 Standard: 7.21 String handling  <string.h>
  21 */
  22
  23#ifndef _STRING_H
  24#define _STRING_H       1
  25
  26#include <features.h>
  27
  28__BEGIN_DECLS
  29
  30/* Get size_t and NULL from <stddef.h>.  */
  31#define __need_size_t
  32#define __need_NULL
  33#include <stddef.h>
  34
  35
  36__BEGIN_NAMESPACE_STD
  37/* Copy N bytes of SRC to DEST.  */
  38extern void *memcpy (void *__restrict __dest,
  39                     __const void *__restrict __srcsize_t __n)
  40     __THROW __nonnull ((1, 2));
  41/* Copy N bytes of SRC to DEST, guaranteeing
  42   correct behavior for overlapping strings.  */
  43extern void *memmove (void *__dest, __const void *__srcsize_t __n)
  44     __THROW __nonnull ((1, 2));
  45__END_NAMESPACE_STD
  46
  47/* Copy no more than N bytes of SRC to DEST, stopping when C is found.
  48   Return the position in DEST one byte past where C was copied,
  49   or NULL if C was not found in the first N bytes of SRC.  */
  50#if defined __USE_SVID || defined __USE_BSD || defined __USE_XOPEN
  51extern void *memccpy (void *__restrict __dest, __const void *__restrict __src,
  52                      int __csize_t __n)
  53     __THROW __nonnull ((1, 2));
  54#endif /* SVID.  */
  55
  56
  57__BEGIN_NAMESPACE_STD
  58/* Set N bytes of S to C.  */
  59extern void *memset (void *__sint __csize_t __n) __THROW __nonnull ((1));
  60
  61/* Compare N bytes of S1 and S2.  */
  62extern int memcmp (__const void *__s1, __const void *__s2size_t __n)
  63     __THROW __attribute_pure__ __nonnull ((1, 2));
  64
  65/* Search N bytes of S for C.  */
  66extern void *memchr (__const void *__sint __csize_t __n)
  67      __THROW __attribute_pure__ __nonnull ((1));
  68__END_NAMESPACE_STD
  69
  70#ifdef __USE_GNU
  71/* Search in S for C.  This is similar to `memchr' but there is no
  72   length limit.  */
  73extern void *rawmemchr (__const void *__sint __c)
  74     __THROW __attribute_pure__ __nonnull ((1));
  75
  76/* Search N bytes of S for the final occurrence of C.  */
  77extern void *memrchr (__const void *__sint __csize_t __n)
  78      __THROW __attribute_pure__ __nonnull ((1));
  79#endif
  80
  81
  82__BEGIN_NAMESPACE_STD
  83/* Copy SRC to DEST.  */
  84extern char *strcpy (char *__restrict __dest, __const char *__restrict __src)
  85     __THROW __nonnull ((1, 2));
  86/* Copy no more than N characters of SRC to DEST.  */
  87extern char *strncpy (char *__restrict __dest,
  88                      __const char *__restrict __srcsize_t __n)
  89     __THROW __nonnull ((1, 2));
  90
  91/* Append SRC onto DEST.  */
  92extern char *strcat (char *__restrict __dest, __const char *__restrict __src)
  93     __THROW __nonnull ((1, 2));
  94/* Append no more than N characters from SRC onto DEST.  */
  95extern char *strncat (char *__restrict __dest, __const char *__restrict __src,
  96                      size_t __n) __THROW __nonnull ((1, 2));
  97
  98/* Compare S1 and S2.  */
  99extern int strcmp (__const char *__s1, __const char *__s2)
 100     __THROW __attribute_pure__ __nonnull ((1, 2));
 101/* Compare N characters of S1 and S2.  */
 102extern int strncmp (__const char *__s1, __const char *__s2size_t __n)
 103     __THROW __attribute_pure__ __nonnull ((1, 2));
 104
 105/* Compare the collated forms of S1 and S2.  */
 106extern int strcoll (__const char *__s1, __const char *__s2)
 107     __THROW __attribute_pure__ __nonnull ((1, 2));
 108/* Put a transformation of SRC into no more than N bytes of DEST.  */
 109extern size_t strxfrm (char *__restrict __dest,
 110                       __const char *__restrict __srcsize_t __n)
 111     __THROW __nonnull ((2));
 112__END_NAMESPACE_STD
 113
 114#ifdef __USE_GNU
 115/* The following functions are equivalent to the both above but they
 116   take the locale they use for the collation as an extra argument.
 117   This is not standardsized but something like will come.  */
 118# include <xlocale.h>
 119
 120/* Compare the collated forms of S1 and S2 using rules from L.  */
 121extern int strcoll_l (__const char *__s1, __const char *__s2, __locale_t __l)
 122     __THROW __attribute_pure__ __nonnull ((1, 2, 3));
 123/* Put a transformation of SRC into no more than N bytes of DEST.  */
 124extern size_t strxfrm_l (char *__dest, __const char *__srcsize_t __n,
 125                         __locale_t __l) __THROW __nonnull ((2, 4));
 126#endif
 127
 128#if defined __USE_SVID || defined __USE_BSD || defined __USE_XOPEN_EXTENDED
 129/* Duplicate S, returning an identical malloc'd string.  */
 130extern char *strdup (__const char *__s)
 131     __THROW __attribute_malloc__ __nonnull ((1));
 132#endif
 133
 134/* Return a malloc'd copy of at most N bytes of STRING.  The
 135   resultant string is terminated even if no null terminator
 136   appears before STRING[N].  */
 137#if defined __USE_GNU
 138extern char *strndup (__const char *__stringsize_t __n)
 139     __THROW __attribute_malloc__ __nonnull ((1));
 140#endif
 141
 142#if defined __USE_GNU && defined __GNUC__
 143/* Duplicate S, returning an identical alloca'd string.  */
 144# define strdupa(s)                                                           \
 145  (__extension__                                                              \
 146    ({                                                                        \
 147      __const char *__old = (s);                                              \
 148      size_t __len = strlen (__old) + 1;                                      \
 149      char *__new = (char *) __builtin_alloca (__len);                        \
 150      (char *) memcpy (__new, __old, __len);                                  \
 151    }))
 152
 153/* Return an alloca'd copy of at most N bytes of string.  */
 154# define strndupa(sn)                                                       \
 155  (__extension__                                                              \
 156    ({                                                                        \
 157      __const char *__old = (s);                                              \
 158      size_t __len = strnlen (__old(n));                                    \
 159      char *__new = (char *) __builtin_alloca (__len + 1);                    \
 160      __new[__len] = '\0';                                                    \
 161      (char *) memcpy (__new, __old, __len);                                  \
 162    }))
 163#endif
 164
 165__BEGIN_NAMESPACE_STD
 166/* Find the first occurrence of C in S.  */
 167extern char *strchr (__const char *__sint __c)
 168     __THROW __attribute_pure__ __nonnull ((1));
 169/* Find the last occurrence of C in S.  */
 170extern char *strrchr (__const char *__sint __c)
 171     __THROW __attribute_pure__ __nonnull ((1));
 172__END_NAMESPACE_STD
 173
 174#ifdef __USE_GNU
 175/* This function is similar to `strchr'.  But it returns a pointer to
 176   the closing NUL byte in case C is not found in S.  */
 177extern char *strchrnul (__const char *__sint __c)
 178     __THROW __attribute_pure__ __nonnull ((1));
 179#endif
 180
 181__BEGIN_NAMESPACE_STD
 182/* Return the length of the initial segment of S which
 183   consists entirely of characters not in REJECT.  */
 184extern size_t strcspn (__const char *__s, __const char *__reject)
 185     __THROW __attribute_pure__ __nonnull ((1, 2));
 186/* Return the length of the initial segment of S which
 187   consists entirely of characters in ACCEPT.  */
 188extern size_t strspn (__const char *__s, __const char *__accept)
 189     __THROW __attribute_pure__ __nonnull ((1, 2));
 190/* Find the first occurrence in S of any character in ACCEPT.  */
 191extern char *strpbrk (__const char *__s, __const char *__accept)
 192     __THROW __attribute_pure__ __nonnull ((1, 2));
 193/* Find the first occurrence of NEEDLE in HAYSTACK.  */
 194extern char *strstr (__const char *__haystack, __const char *__needle)
 195     __THROW __attribute_pure__ __nonnull ((1, 2));
 196
 197
 198/* Divide S into tokens separated by characters in DELIM.  */
 199extern char *strtok (char *__restrict __s, __const char *__restrict __delim)
 200     __THROW __nonnull ((2));
 201__END_NAMESPACE_STD
 202
 203/* Divide S into tokens separated by characters in DELIM.  Information
 204   passed between calls are stored in SAVE_PTR.  */
 205extern char *__strtok_r (char *__restrict __s,
 206                         __const char *__restrict __delim,
 207                         char **__restrict __save_ptr)
 208     __THROW __nonnull ((2, 3));
 209#if defined __USE_POSIX || defined __USE_MISC
 210extern char *strtok_r (char *__restrict __s, __const char *__restrict __delim,
 211                       char **__restrict __save_ptr)
 212     __THROW __nonnull ((2, 3));
 213#endif
 214
 215#ifdef __USE_GNU
 216/* Similar to `strstr' but this function ignores the case of both strings.  */
 217extern char *strcasestr (__const char *__haystack, __const char *__needle)
 218     __THROW __attribute_pure__ __nonnull ((1, 2));
 219#endif
 220
 221#ifdef __USE_GNU
 222/* Find the first occurrence of NEEDLE in HAYSTACK.
 223   NEEDLE is NEEDLELEN bytes long;
 224   HAYSTACK is HAYSTACKLEN bytes long.  */
 225extern void *memmem (__const void *__haystacksize_t __haystacklen,
 226                     __const void *__needlesize_t __needlelen)
 227     __THROW __attribute_pure__ __nonnull ((1, 3));
 228
 229/* Copy N bytes of SRC to DEST, return pointer to bytes after the
 230   last written byte.  */
 231extern void *__mempcpy (void *__restrict __dest,
 232                        __const void *__restrict __srcsize_t __n)
 233     __THROW __nonnull ((1, 2));
 234extern void *mempcpy (void *__restrict __dest,
 235                      __const void *__restrict __srcsize_t __n)
 236     __THROW __nonnull ((1, 2));
 237#endif
 238
 239
 240__BEGIN_NAMESPACE_STD
 241/* Return the length of S.  */
 242extern size_t strlen (__const char *__s)
 243     __THROW __attribute_pure__ __nonnull ((1));
 244__END_NAMESPACE_STD
 245
 246#ifdef  __USE_GNU
 247/* Find the length of STRING, but scan at most MAXLEN characters.
 248   If no '\0' terminator is found in that many characters, return MAXLEN.  */
 249extern size_t strnlen (__const char *__stringsize_t __maxlen)
 250     __THROW __attribute_pure__ __nonnull ((1));
 251#endif
 252
 253
 254__BEGIN_NAMESPACE_STD
 255/* Return a string describing the meaning of the `errno' code in ERRNUM.  */
 256extern char *strerror (int __errnum) __THROW;
 257__END_NAMESPACE_STD
 258#if defined __USE_XOPEN2K || defined __USE_MISC
 259/* Reentrant version of `strerror'.
 260   There are 2 flavors of `strerror_r', GNU which returns the string
 261   and may or may not use the supplied temporary buffer and POSIX one
 262   which fills the string into the buffer.
 263   To use the POSIX version, -D_XOPEN_SOURCE=600 or -D_POSIX_C_SOURCE=200112L
 264   without -D_GNU_SOURCE is needed, otherwise the GNU version is
 265   preferred.  */
 266# if defined __USE_XOPEN2K && !defined __USE_GNU
 267/* Fill BUF with a string describing the meaning of the `errno' code in
 268   ERRNUM.  */
 269#  ifdef __REDIRECT_NTH
 270extern int __REDIRECT_NTH (strerror_r,
 271                           (int __errnumchar *__bufsize_t __buflen),
 272                           __xpg_strerror_r) __nonnull ((2));
 273#  else
 274extern int __xpg_strerror_r (int __errnumchar *__bufsize_t __buflen)
 275     __THROW __nonnull ((2));
 276#   define strerror_r __xpg_strerror_r
 277#  endif
 278# else
 279/* If a temporary buffer is required, at most BUFLEN bytes of BUF will be
 280   used.  */
 281extern char *strerror_r (int __errnumchar *__bufsize_t __buflen)
 282     __THROW __nonnull ((2));
 283# endif
 284#endif
 285
 286#ifdef __USE_GNU
 287/* Translate error number to string according to the locale L.  */
 288extern char *strerror_l (int __errnum, __locale_t __l) __THROW;
 289#endif
 290
 291
 292/* We define this function always since `bzero' is sometimes needed when
 293   the namespace rules does not allow this.  */
 294extern void __bzero (void *__ssize_t __n) __THROW __nonnull ((1));
 295
 296#ifdef __USE_BSD
 297/* Copy N bytes of SRC to DEST (like memmove, but args reversed).  */
 298extern void bcopy (__const void *__srcvoid *__destsize_t __n)
 299     __THROW __nonnull ((1, 2));
 300
 301/* Set N bytes of S to 0.  */
 302extern void bzero (void *__ssize_t __n) __THROW __nonnull ((1));
 303
 304/* Compare N bytes of S1 and S2 (same as memcmp).  */
 305extern int bcmp (__const void *__s1, __const void *__s2size_t __n)
 306     __THROW __attribute_pure__ __nonnull ((1, 2));
 307
 308/* Find the first occurrence of C in S (same as strchr).  */
 309extern char *index (__const char *__sint __c)
 310     __THROW __attribute_pure__ __nonnull ((1));
 311
 312/* Find the last occurrence of C in S (same as strrchr).  */
 313extern char *rindex (__const char *__sint __c)
 314     __THROW __attribute_pure__ __nonnull ((1));
 315
 316/* Return the position of the first bit set in I, or 0 if none are set.
 317   The least-significant bit is position 1, the most-significant 32.  */
 318extern int ffs (int __i) __THROW __attribute__ ((__const__));
 319
 320/* The following two functions are non-standard but necessary for non-32 bit
 321   platforms.  */
 322# ifdef __USE_GNU
 323extern int ffsl (long int __l) __THROW __attribute__ ((__const__));
 324#  ifdef __GNUC__
 325__extension__ extern int ffsll (long long int __ll)
 326     __THROW __attribute__ ((__const__));
 327#  endif
 328# endif
 329
 330/* Compare S1 and S2, ignoring case.  */
 331extern int strcasecmp (__const char *__s1, __const char *__s2)
 332     __THROW __attribute_pure__ __nonnull ((1, 2));
 333
 334/* Compare no more than N chars of S1 and S2, ignoring case.  */
 335extern int strncasecmp (__const char *__s1, __const char *__s2size_t __n)
 336     __THROW __attribute_pure__ __nonnull ((1, 2));
 337#endif /* Use BSD.  */
 338
 339#ifdef  __USE_GNU
 340/* Again versions of a few functions which use the given locale instead
 341   of the global one.  */
 342extern int strcasecmp_l (__const char *__s1, __const char *__s2,
 343                         __locale_t __loc)
 344     __THROW __attribute_pure__ __nonnull ((1, 2, 3));
 345
 346extern int strncasecmp_l (__const char *__s1, __const char *__s2,
 347                          size_t __n, __locale_t __loc)
 348     __THROW __attribute_pure__ __nonnull ((1, 2, 4));
 349#endif
 350
 351#ifdef  __USE_BSD
 352/* Return the next DELIM-delimited token from *STRINGP,
 353   terminating it with a '\0', and update *STRINGP to point past it.  */
 354extern char *strsep (char **__restrict __stringp,
 355                     __const char *__restrict __delim)
 356     __THROW __nonnull ((1, 2));
 357#endif
 358
 359#ifdef  __USE_GNU
 360/* Compare S1 and S2 as strings holding name & indices/version numbers.  */
 361extern int strverscmp (__const char *__s1, __const char *__s2)
 362     __THROW __attribute_pure__ __nonnull ((1, 2));
 363
 364/* Return a string describing the meaning of the signal number in SIG.  */
 365extern char *strsignal (int __sig) __THROW;
 366
 367/* Copy SRC to DEST, returning the address of the terminating '\0' in DEST.  */
 368extern char *__stpcpy (char *__restrict __dest, __const char *__restrict __src)
 369     __THROW __nonnull ((1, 2));
 370extern char *stpcpy (char *__restrict __dest, __const char *__restrict __src)
 371     __THROW __nonnull ((1, 2));
 372
 373/* Copy no more than N characters of SRC to DEST, returning the address of
 374   the last character written into DEST.  */
 375extern char *__stpncpy (char *__restrict __dest,
 376                        __const char *__restrict __srcsize_t __n)
 377     __THROW __nonnull ((1, 2));
 378extern char *stpncpy (char *__restrict __dest,
 379                      __const char *__restrict __srcsize_t __n)
 380     __THROW __nonnull ((1, 2));
 381
 382/* Sautee STRING briskly.  */
 383extern char *strfry (char *__string) __THROW __nonnull ((1));
 384
 385/* Frobnicate N bytes of S.  */
 386extern void *memfrob (void *__ssize_t __n) __THROW __nonnull ((1));
 387
 388# ifndef basename
 389/* Return the file name within directory of FILENAME.  We don't
 390   declare the function if the `basename' macro is available (defined
 391   in <libgen.h>) which makes the XPG version of this function
 392   available.  */
 393extern char *basename (__const char *__filename) __THROW __nonnull ((1));
 394# endif
 395#endif
 396
 397
 398#if defined __GNUC__ && __GNUC__ >= 2
 399# if defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__ \
 400     && !defined __NO_INLINE__ && !defined __cplusplus
 401/* When using GNU CC we provide some optimized versions of selected
 402   functions from this header.  There are two kinds of optimizations:
 403
 404   - machine-dependent optimizations, most probably using inline
 405     assembler code; these might be quite expensive since the code
 406     size can increase significantly.
 407     These optimizations are not used unless the symbol
 408        __USE_STRING_INLINES
 409     is defined before including this header.
 410
 411   - machine-independent optimizations which do not increase the
 412     code size significantly and which optimize mainly situations
 413     where one or more arguments are compile-time constants.
 414     These optimizations are used always when the compiler is
 415     taught to optimize.
 416
 417   One can inhibit all optimizations by defining __NO_STRING_INLINES.  */
 418
 419/* Get the machine-dependent optimizations (if any).  */
 420#  include <bits/string.h>
 421
 422/* These are generic optimizations which do not add too much inline code.  */
 423#  include <bits/string2.h>
 424# endif
 425
 426# if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline
 427/* Functions with security checks.  */
 428#  include <bits/string3.h>
 429# endif
 430#endif
 431
 432__END_DECLS
 433
 434#endif /* string.h  */
weiter

Letzte Änderung: 06.05.2002
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel