Many changes after first published edition and comments from mib; still not finished.
[kopensolaris-gnu/glibc.git] / manual / string.texi
1 @node String and Array Utilities, Extended Characters, Character Handling, Top
2 @chapter String and Array Utilities
3
4 Operations on strings (or arrays of characters) are an important part of
5 many programs.  The GNU C library provides an extensive set of string
6 utility functions, including functions for copying, concatenating,
7 comparing, and searching strings.  Many of these functions can also
8 operate on arbitrary regions of storage; for example, the @code{memcpy}
9 function can be used to copy the contents of any kind of array.  
10
11 It's fairly common for beginning C programmers to ``reinvent the wheel''
12 by duplicating this functionality in their own code, but it pays to
13 become familiar with the library functions and to make use of them,
14 since this offers benefits in maintenance, efficiency, and portability.
15
16 For instance, you could easily compare one string to another in two
17 lines of C code, but if you use the built-in @code{strcmp} function,
18 you're less likely to make a mistake.  And, since these library
19 functions are typically highly optimized, your program may run faster
20 too.
21
22 @menu
23 * Representation of Strings::   Introduction to basic concepts.
24 * String/Array Conventions::    Whether to use a string function or an
25                                  arbitrary array function.
26 * String Length::               Determining the length of a string.
27 * Copying and Concatenation::   Functions to copy the contents of strings
28                                  and arrays.
29 * String/Array Comparison::     Functions for byte-wise and character-wise
30                                  comparison.
31 * Collation Functions::         Functions for collating strings.
32 * Search Functions::            Searching for a specific element or substring.
33 * Finding Tokens in a String::  Splitting a string into tokens by looking
34                                  for delimiters.
35 @end menu
36
37 @node Representation of Strings, String/Array Conventions,  , String and Array Utilities
38 @section Representation of Strings
39 @cindex string, representation of
40
41 This section is a quick summary of string concepts for beginning C
42 programmers.  It describes how character strings are represented in C
43 and some common pitfalls.  If you are already familiar with this
44 material, you can skip this section.
45
46 @cindex string
47 @cindex null character
48 A @dfn{string} is an array of @code{char} objects.  But string-valued
49 variables are usually declared to be pointers of type @code{char *}.
50 Such variables do not include space for the text of a string; that has
51 to be stored somewhere else---in an array variable, a string constant,
52 or dynamically allocated memory (@pxref{Memory Allocation}).  It's up to
53 you to store the address of the chosen memory space into the pointer
54 variable.  Alternatively you can store a @dfn{null pointer} in the
55 pointer variable.  The null pointer does not point anywhere, so
56 attempting to reference the string it points to gets an error.
57
58 By convention, a @dfn{null character}, @code{'\0'}, marks the end of a
59 string.  For example, in testing to see whether the @code{char *}
60 variable @var{p} points to a null character marking the end of a string,
61 you can write @code{!*@var{p}} or @code{*@var{p} == '\0'}.
62
63 A null character is quite different conceptually from a null pointer,
64 although both are represented by the integer @code{0}.
65
66 @cindex string literal
67 @dfn{String literals} appear in C program source as strings of
68 characters between double-quote characters (@samp{"}).  In ANSI C,
69 string literals can also be formed by @dfn{string concatenation}:
70 @code{"a" "b"} is the same as @code{"ab"}.  Modification of string
71 literals is not allowed by the GNU C compiler, because literals
72 are placed in read-only storage.
73
74 Character arrays that are declared @code{const} cannot be modified
75 either.  It's generally good style to declare non-modifiable string
76 pointers to be of type @code{const char *}, since this often allows the
77 C compiler to detect accidental modifications as well as providing some
78 amount of documentation about what your program intends to do with the
79 string.
80
81 The amount of memory allocated for the character array may extend past
82 the null character that normally marks the end of the string.  In this
83 document, the term @dfn{allocation size} is always used to refer to the
84 total amount of memory allocated for the string, while the term
85 @dfn{length} refers to the number of characters up to (but not
86 including) the terminating null character.
87 @cindex length of string
88 @cindex allocation size of string
89 @cindex size of string
90 @cindex string length
91 @cindex string allocation
92
93 A notorious source of program bugs is trying to put more characters in a
94 string than fit in its allocated size.  When writing code that extends
95 strings or moves characters into a pre-allocated array, you should be
96 very careful to keep track of the length of the text and make explicit
97 checks for overflowing the array.  Many of the library functions
98 @emph{do not} do this for you!  Remember also that you need to allocate
99 an extra byte to hold the null character that marks the end of the
100 string.
101
102 @node String/Array Conventions, String Length, Representation of Strings, String and Array Utilities
103 @section String and Array Conventions
104
105 This chapter describes both functions that work on arbitrary arrays or
106 blocks of memory, and functions that are specific to null-terminated
107 arrays of characters.
108
109 Functions that operate on arbitrary blocks of memory have names
110 beginning with @samp{mem} (such as @code{memcpy}) and invariably take an
111 argument which specifies the size (in bytes) of the block of memory to
112 operate on.  The array arguments and return values for these functions
113 have type @code{void *}, and as a matter of style, the elements of these
114 arrays are referred to as ``bytes''.  You can pass any kind of pointer
115 to these functions, and the @code{sizeof} operator is useful in
116 computing the value for the size argument.
117
118 In contrast, functions that operate specifically on strings have names
119 beginning with @samp{str} (such as @code{strcpy}) and look for a null
120 character to terminate the string instead of requiring an explicit size
121 argument to be passed.  (Some of these functions accept a specified
122 maximum length, but they also check for premature termination with a
123 null character.)  The array arguments and return values for these
124 functions have type @code{char *}, and the array elements are referred
125 to as ``characters''.
126
127 In many cases, there are both @samp{mem} and @samp{str} versions of a
128 function.  The one that is more appropriate to use depends on the exact
129 situation.  When your program is manipulating arbitrary arrays or blocks of
130 storage, then you should always use the @samp{mem} functions.  On the
131 other hand, when you are manipulating null-terminated strings it is
132 usually more convenient to use the @samp{str} functions, unless you
133 already know the length of the string in advance.
134
135 @node String Length, Copying and Concatenation, String/Array Conventions, String and Array Utilities
136 @section String Length
137
138 You can get the length of a string using the @code{strlen} function.
139 This function is declared in the header file @file{string.h}.
140 @pindex string.h
141
142 @comment string.h
143 @comment ANSI
144 @deftypefun size_t strlen (const char *@var{s})
145 The @code{strlen} function returns the length of the null-terminated
146 string @var{s}.  (In other words, it returns the offset of the terminating
147 null character within the array.)
148
149 For example,
150 @smallexample
151 strlen ("hello, world")
152     @result{} 12
153 @end smallexample
154
155 When applied to a character array, the @code{strlen} function returns
156 the length of the string stored there, not its allocation size.  You can
157 get the allocation size of the character array that holds a string using
158 the @code{sizeof} operator:
159
160 @smallexample
161 char string[32] = "hello, world"; 
162 sizeof (string)
163     @result{} 32
164 strlen (string)
165     @result{} 12
166 @end smallexample
167 @end deftypefun
168
169 @node Copying and Concatenation, String/Array Comparison, String Length, String and Array Utilities
170 @section Copying and Concatenation
171
172 You can use the functions described in this section to copy the contents
173 of strings and arrays, or to append the contents of one string to
174 another.  These functions are declared in the header file
175 @file{string.h}.
176 @pindex string.h
177 @cindex copying strings and arrays
178 @cindex string copy functions
179 @cindex array copy functions
180 @cindex concatenating strings
181 @cindex string concatenation functions
182
183 A helpful way to remember the ordering of the arguments to the functions
184 in this section is that it corresponds to an assignment expression, with
185 the destination array specified to the left of the source array.  All
186 of these functions return the address of the destination array.
187
188 Most of these functions do not work properly if the source and
189 destination arrays overlap.  For example, if the beginning of the
190 destination array overlaps the end of the source array, the original
191 contents of that part of the source array may get overwritten before it
192 is copied.  Even worse, in the case of the string functions, the null
193 character marking the end of the string may be lost, and the copy
194 function might get stuck in a loop trashing all the memory allocated to
195 your program.
196
197 All functions that have problems copying between overlapping arrays are
198 explicitly identified in this manual.  In addition to functions in this
199 section, there are a few others like @code{sprintf} (@pxref{Formatted
200 Output Functions}) and @code{scanf} (@pxref{Formatted Input
201 Functions}).
202
203 @comment string.h
204 @comment ANSI
205 @deftypefun {void *} memcpy (void *@var{to}, const void *@var{from}, size_t @var{size})
206 The @code{memcpy} function copies @var{size} bytes from the object
207 beginning at @var{from} into the object beginning at @var{to}.  The
208 behavior of this function is undefined if the two arrays @var{to} and
209 @var{from} overlap; use @code{memmove} instead if overlapping is possible.
210
211 The value returned by @code{memcpy} is the value of @var{to}.
212
213 Here is an example of how you might use @code{memcpy} to copy the
214 contents of an array:
215
216 @smallexample
217 struct foo *oldarray, *newarray;
218 int arraysize;
219 @dots{}
220 memcpy (new, old, arraysize * sizeof (struct foo));
221 @end smallexample
222 @end deftypefun
223
224 @comment string.h
225 @comment ANSI
226 @deftypefun {void *} memmove (void *@var{to}, const void *@var{from}, size_t @var{size})
227 @code{memmove} copies the @var{size} bytes at @var{from} into the
228 @var{size} bytes at @var{to}, even if those two blocks of space
229 overlap.  In the case of overlap, @code{memmove} is careful to copy the
230 original values of the bytes in the block at @var{from}, including those
231 bytes which also belong to the block at @var{to}.
232 @end deftypefun
233
234 @comment string.h
235 @comment SVID
236 @deftypefun {void *} memccpy (void *@var{to}, const void *@var{from}, int @var{c}, size_t @var{size})
237 This function copies no more than @var{size} bytes from @var{from} to
238 @var{to}, stopping if a byte matching @var{c} is found.  The return
239 value is a pointer into @var{to} one byte past where @var{c} was copied,
240 or a null pointer if no byte matching @var{c} appeared in the first
241 @var{size} bytes of @var{from}.
242 @end deftypefun
243
244 @comment string.h
245 @comment ANSI
246 @deftypefun {void *} memset (void *@var{block}, int @var{c}, size_t @var{size})
247 This function copies the value of @var{c} (converted to an
248 @code{unsigned char}) into each of the first @var{size} bytes of the
249 object beginning at @var{block}.  It returns the value of @var{block}.
250 @end deftypefun
251
252 @comment string.h
253 @comment ANSI
254 @deftypefun {char *} strcpy (char *@var{to}, const char *@var{from})
255 This copies characters from the string @var{from} (up to and including
256 the terminating null character) into the string @var{to}.  Like
257 @code{memcpy}, this function has undefined results if the strings
258 overlap.  The return value is the value of @var{to}.
259 @end deftypefun
260
261 @comment string.h
262 @comment ANSI
263 @deftypefun {char *} strncpy (char *@var{to}, const char *@var{from}, size_t @var{size})
264 This function is similar to @code{strcpy} but always copies exactly
265 @var{size} characters into @var{to}.
266
267 If the length of @var{from} is more than @var{size}, then @code{strncpy}
268 copies just the first @var{size} characters.
269
270 If the length of @var{from} is less than @var{size}, then @code{strncpy}
271 copies all of @var{from}, followed by enough null characters to add up
272 to @var{size} characters in all.  This behavior is rarely useful, but it
273 is specified by the ANSI C standard.
274
275 The behavior of @code{strncpy} is undefined if the strings overlap.
276
277 Using @code{strncpy} as opposed to @code{strcpy} is a way to avoid bugs
278 relating to writing past the end of the allocated space for @var{to}.
279 However, it can also make your program much slower in one common case:
280 copying a string which is probably small into a potentially large buffer.
281 In this case, @var{size} may be large, and when it is, @code{strncpy} will
282 waste a considerable amount of time copying null characters.
283 @end deftypefun
284
285 @comment string.h
286 @comment SVID
287 @deftypefun {char *} strdup (const char *@var{s})
288 This function copies the null-terminated string @var{s} into a newly
289 allocated string.  The string is allocated using @code{malloc}; see
290 @ref{Unconstrained Allocation}.  If @code{malloc} cannot allocate space
291 for the new string, @code{strdup} returns a null pointer.  Otherwise it
292 returns a pointer to the new string.
293 @end deftypefun
294
295 @comment string.h
296 @comment Unknown origin
297 @deftypefun {char *} stpcpy (char *@var{to}, const char *@var{from})
298 This function is like @code{strcpy}, except that it returns a pointer to
299 the end of the string @var{to} (that is, the address of the terminating
300 null character) rather than the beginning.
301
302 For example, this program uses @code{stpcpy} to concatenate @samp{foo}
303 and @samp{bar} to produce @samp{foobar}, which it then prints.
304
305 @smallexample
306 @include stpcpy.c.texi
307 @end smallexample
308
309 This function is not part of the ANSI or POSIX standards, and is not
310 customary on Unix systems, but we did not invent it either.  Perhaps it
311 comes from MS-DOG.
312
313 Its behavior is undefined if the strings overlap.
314 @end deftypefun
315
316 @comment string.h
317 @comment ANSI
318 @deftypefun {char *} strcat (char *@var{to}, const char *@var{from})
319 The @code{strcat} function is similar to @code{strcpy}, except that the
320 characters from @var{from} are concatenated or appended to the end of
321 @var{to}, instead of overwriting it.  That is, the first character from
322 @var{from} overwrites the null character marking the end of @var{to}.
323
324 An equivalent definition for @code{strcat} would be:
325
326 @smallexample
327 char *
328 strcat (char *to, const char *from)
329 @{
330   strcpy (to + strlen (to), from);
331   return to;
332 @}
333 @end smallexample
334
335 This function has undefined results if the strings overlap.
336 @end deftypefun
337
338 @comment string.h
339 @comment ANSI
340 @deftypefun {char *} strncat (char *@var{to}, const char *@var{from}, size_t @var{size})
341 This function is like @code{strcat} except that not more than @var{size}
342 characters from @var{from} are appended to the end of @var{to}.  A
343 single null character is also always appended to @var{to}, so the total
344 allocated size of @var{to} must be at least @code{@var{size} + 1} bytes
345 longer than its initial length.
346
347 The @code{strncat} function could be implemented like this:
348
349 @smallexample
350 @group
351 char *
352 strncat (char *to, const char *from, size_t size)
353 @{
354   strncpy (to + strlen (to), from, size);
355   return to;
356 @}
357 @end group
358 @end smallexample
359
360 The behavior of @code{strncat} is undefined if the strings overlap.
361 @end deftypefun
362
363 Here is an example showing the use of @code{strncpy} and @code{strncat}.
364 Notice how, in the call to @code{strncat}, the @var{size} parameter
365 is computed to avoid overflowing the character array @code{buffer}.
366
367 @smallexample
368 @include strncat.c.texi
369 @end smallexample
370
371 @noindent
372 The output produced by this program looks like:
373
374 @smallexample
375 hello
376 hello, wo
377 @end smallexample
378
379 @comment string.h
380 @comment BSD
381 @deftypefun {void *} bcopy (void *@var{from}, const void *@var{to}, size_t @var{size})
382 This is a partially obsolete alternative for @code{memmove}, derived from
383 BSD.  Note that it is not quite equivalent to @code{memmove}, because the
384 arguments are not in the same order.
385 @end deftypefun
386
387 @comment string.h
388 @comment BSD
389 @deftypefun {void *} bzero (void *@var{block}, size_t @var{size})
390 This is a partially obsolete alternative for @code{memset}, derived from
391 BSD.  Note that it is not as general as @code{memset}, because the only
392 value it can store is zero.  Some machines have special instructions for
393 zeroing memory, so @code{bzero} might be more efficient than
394 @code{memset}.
395 @end deftypefun
396
397 @node String/Array Comparison, Collation Functions, Copying and Concatenation, String and Array Utilities
398 @section String/Array Comparison
399 @cindex comparing strings and arrays
400 @cindex string comparison functions
401 @cindex array comparison functions
402 @cindex predicates on strings
403 @cindex predicates on arrays
404
405 You can use the functions in this section to perform comparisons on the
406 contents of strings and arrays.  As well as checking for equality, these
407 functions can also be used as the ordering functions for sorting
408 operations.  @xref{Searching and Sorting}, for an example of this.
409
410 Unlike most comparison operations in C, the string comparison functions
411 return a nonzero value if the strings are @emph{not} equivalent rather
412 than if they are.  The sign of the value indicates the relative ordering
413 of the first characters in the strings that are not equivalent:  a
414 negative value indicates that the first string is ``less'' than the
415 second, while a positive value indicates that the first string is 
416 ``greater''.
417
418 If you are using these functions only to check for equality, you might
419 find it makes for a cleaner program to hide them behind a macro
420 definition, like this:
421
422 @smallexample
423 #define str_eq(s1,s2)  (!strcmp ((s1),(s2)))
424 @end smallexample
425
426 All of these functions are declared in the header file @file{string.h}.
427 @pindex string.h
428
429 @comment string.h
430 @comment ANSI
431 @deftypefun int memcmp (const void *@var{a1}, const void *@var{a2}, size_t @var{size})
432 The function @code{memcmp} compares the @var{size} bytes of memory
433 beginning at @var{a1} against the @var{size} bytes of memory beginning
434 at @var{a2}.  The value returned has the same sign as the difference
435 between the first differing pair of bytes (interpreted as @code{unsigned
436 char} objects, then promoted to @code{int}).
437
438 If the contents of the two blocks are equal, @code{memcmp} returns
439 @code{0}.
440 @end deftypefun
441
442 On arbitrary arrays, the @code{memcmp} function is mostly useful for
443 testing equality.  It usually isn't meaningful to do byte-wise ordering
444 comparisons on arrays of things other than bytes.  For example, a
445 byte-wise comparison on the bytes that make up floating-point numbers
446 isn't likely to tell you anything about the relationship between the
447 values of the floating-point numbers.
448
449 You should also be careful about using @code{memcmp} to compare objects
450 that can contain ``holes'', such as the padding inserted into structure
451 objects to enforce alignment requirements, extra space at the end of
452 unions, and extra characters at the ends of strings whose length is less
453 than their allocated size.  The contents of these ``holes'' are
454 indeterminate and may cause strange behavior when performing byte-wise
455 comparisons.  For more predictable results, perform an explicit
456 component-wise comparison.
457
458 For example, given a structure type definition like:
459
460 @smallexample
461 struct foo
462   @{
463     unsigned char tag;
464     union
465       @{
466         double f;
467         long i;
468         char *p;
469       @} value;
470   @};
471 @end smallexample
472
473 @noindent
474 you are better off writing a specialized comparison function to compare
475 @code{struct foo} objects instead of comparing them with @code{memcmp}.
476
477 @comment string.h
478 @comment ANSI
479 @deftypefun int strcmp (const char *@var{s1}, const char *@var{s2})
480 The @code{strcmp} function compares the string @var{s1} against
481 @var{s2}, returning a value that has the same sign as the difference
482 between the first differing pair of characters (interpreted as
483 @code{unsigned char} objects, then promoted to @code{int}).
484
485 If the two strings are equal, @code{strcmp} returns @code{0}.
486
487 A consequence of the ordering used by @code{strcmp} is that if @var{s1}
488 is an initial substring of @var{s2}, then @var{s1} is considered to be
489 ``less than'' @var{s2}.
490 @end deftypefun
491
492 @comment string.h
493 @comment BSD
494 @deftypefun int strcasecmp (const char *@var{s1}, const char *@var{s2})
495 This function is like @code{strcmp}, except that differences in case
496 are ignored.
497
498 @code{strcasecmp} is derived from BSD.
499 @end deftypefun
500
501 @comment string.h
502 @comment BSD
503 @deftypefun int strncasecmp (const char *@var{s1}, const char *@var{s2}, size_t @var{n})
504 This function is like @code{strncmp}, except that differences in case
505 are ignored.
506
507 @code{strncasecmp} is a GNU extension.
508 @end deftypefun
509
510 @comment string.h
511 @comment ANSI
512 @deftypefun int strncmp (const char *@var{s1}, const char *@var{s2}, size_t @var{size})
513 This function is the similar to @code{strcmp}, except that no more than
514 @var{size} characters are compared.  In other words, if the two strings are
515 the same in their first @var{size} characters, the return value is zero.
516 @end deftypefun
517
518 Here are some examples showing the use of @code{strcmp} and @code{strncmp}.
519 These examples assume the use of the ASCII character set.  (If some
520 other character set---say, EBCDIC---is used instead, then the glyphs
521 are associated with different numeric codes, and the return values
522 and ordering may differ.)
523
524 @smallexample
525 strcmp ("hello", "hello")
526     @result{} 0    /* @r{These two strings are the same.} */
527 strcmp ("hello", "Hello")
528     @result{} 32   /* @r{Comparisons are case-sensitive.} */
529 strcmp ("hello", "world")
530     @result{} -15  /* @r{The character @code{'h'} comes before @code{'w'}.} */
531 strcmp ("hello", "hello, world")
532     @result{} -44  /* @r{Comparing a null character against a comma.} */
533 strncmp ("hello", "hello, world"", 5)
534     @result{} 0    /* @r{The initial 5 characters are the same.} */
535 strncmp ("hello, world", "hello, stupid world!!!", 5)
536     @result{} 0    /* @r{The initial 5 characters are the same.} */
537 @end smallexample
538
539 @comment string.h
540 @comment BSD
541 @deftypefun int bcmp (const void *@var{a1}, const void *@var{a2}, size_t @var{size})
542 This is an obsolete alias for @code{memcmp}, derived from BSD.
543 @end deftypefun
544
545 @node Collation Functions, Search Functions, String/Array Comparison, String and Array Utilities
546 @section Collation Functions
547
548 @cindex collating strings
549 @cindex string collation functions
550
551 In some locales, the conventions for lexicographic ordering differ from
552 the strict numeric ordering of character codes.  For example, in Spanish
553 most glyphs with diacritical marks such as accents are not considered
554 distinct letters for the purposes of collation.  On the other hand, the
555 two-character sequence @samp{ll} is treated as a single letter that is
556 collated immediately after @samp{l}.
557
558 You can use the functions @code{strcoll} and @code{strxfrm} (declared in
559 the header file @file{string.h}) to compare strings using a collation
560 ordering appropriate for the current locale.  The locale used by these
561 functions in particular can be specified by setting the locale for the
562 @code{LC_COLLATE} category; see @ref{Locales}.
563 @pindex string.h
564
565 In the standard C locale, the collation sequence for @code{strcoll} is
566 the same as that for @code{strcmp}.
567
568 Effectively, the way these functions work is by applying a mapping to
569 transform the characters in a string to a byte sequence that represents
570 the string's position in the collating sequence of the current locale.
571 Comparing two such byte sequences in a simple fashion is equivalent to
572 comparing the strings with the locale's collating sequence.
573
574 The function @code{strcoll} performs this translation implicitly, in
575 order to do one comparison.  By contrast, @code{strxfrm} performs the
576 mapping explicitly.  If you are making multiple comparisons using the
577 same string or set of strings, it is likely to be more efficient to use
578 @code{strxfrm} to transform all the strings just once, and subsequently
579 compare the transformed strings with @code{strcmp}.
580
581 @comment string.h
582 @comment ANSI
583 @deftypefun int strcoll (const char *@var{s1}, const char *@var{s2})
584 The @code{strcoll} function is similar to @code{strcmp} but uses the
585 collating sequence of the current locale for collation (the
586 @code{LC_COLLATE} locale).
587 @end deftypefun
588
589 Here is an example of sorting an array of strings, using @code{strcoll}
590 to compare them.  The actual sort algorithm is not written here; it
591 comes from @code{qsort} (@pxref{Array Sort Function}).  The job of the
592 code shown here is to say how to compare the strings while sorting them.
593 (Later on in this section, we will show a way to do this more
594 efficiently using @code{strxfrm}.)
595
596 @smallexample
597 /* @r{This is the comparison function used with @code{qsort}.} */
598
599 int
600 compare_elements (char **p1, char **p2)
601 @{
602   return strcoll (*p1, *p2);
603 @}
604
605 /* @r{This is the entry point---the function to sort}
606    @r{strings using the locale's collating sequence.} */
607
608 void
609 sort_strings (char **array, int nstrings)
610 @{
611   /* @r{Sort @code{temp_array} by comparing the strings.} */
612   qsort (array, sizeof (char *),
613          nstrings, compare_elements);
614 @}
615 @end smallexample
616
617 @cindex converting string to collation order
618 @comment string.h
619 @comment ANSI
620 @deftypefun size_t strxfrm (char *@var{to}, const char *@var{from}, size_t @var{size})
621 The function @code{strxfrm} transforms @var{string} using the collation
622 transformation determined by the locale currently selected for
623 collation, and stores the transformed string in the array @var{to}.  Up
624 to @var{size} characters (including a terminating null character) are
625 stored.
626
627 The behavior is undefined if the strings @var{to} and @var{from}
628 overlap; see @ref{Copying and Concatenation}.
629
630 The return value is the length of the entire transformed string.  This
631 value is not affected by the value of @var{size}, but if it is greater
632 than @var{size}, it means that the transformed string did not entirely
633 fit in the array @var{to}.  In this case, only as much of the string as
634 actually fits was stored.  To get the whole transformed string, call
635 @code{strxfrm} again with a bigger output array.
636
637 The transformed string may be longer than the original string, and it
638 may also be shorter.
639
640 If @var{size} is zero, no characters are stored in @var{to}.  In this
641 case, @code{strxfrm} simply returns the number of characters that would
642 be the length of the transformed string.  This is useful for determining
643 what size string to allocate.  It does not matter what @var{to} is if
644 @var{size} is zero; @var{to} may even be a null pointer.
645 @end deftypefun
646
647 Here is an example of how you can use @code{strxfrm} when
648 you plan to do many comparisons.  It does the same thing as the previous
649 example, but much faster, because it has to transform each string only
650 once, no matter how many times it is compared with other strings.  Even
651 the time needed to allocate and free storage is much less than the time
652 we save, when there are many strings.
653
654 @smallexample
655 struct sorter @{ char *input; char *transformed; @};
656
657 /* @r{This is the comparison function used with @code{qsort}}
658    @r{to sort an array of @code{struct sorter}.} */
659
660 int
661 compare_elements (struct sorter *p1, struct sorter *p2)
662 @{
663   return strcmp (p1->transformed, p2->transformed);
664 @}
665
666 /* @r{This is the entry point---the function to sort}
667    @r{strings using the locale's collating sequence.} */
668
669 void
670 sort_strings_fast (char **array, int nstrings)
671 @{
672   struct sorter temp_array[nstrings];
673   int i;
674
675   /* @r{Set up @code{temp_array}.  Each element contains}
676      @r{one input string and its transformed string.} */
677   for (i = 0; i < nstrings; i++)
678     @{
679       size_t length = strlen (array[i]) * 2;
680
681       temp_array[i].input = array[i];
682
683       /* @r{Transform @code{array[i]}.}
684          @r{First try a buffer probably big enough.} */
685       while (1)
686         @{
687           char *transformed = (char *) xmalloc (length);
688           if (strxfrm (transformed, array[i], length) < length)
689             @{
690               temp_array[i].transformed = transformed;
691               break;
692             @}
693           /* @r{Try again with a bigger buffer.} */
694           free (transformed);
695           length *= 2;
696         @}
697     @}
698
699   /* @r{Sort @code{temp_array} by comparing transformed strings.} */
700   qsort (temp_array, sizeof (struct sorter),
701          nstrings, compare_elements);
702
703   /* @r{Put the elements back in the permanent array}
704      @r{in their sorted order.} */
705   for (i = 0; i < nstrings; i++)
706     array[i] = temp_array[i].input;
707
708   /* @r{Free the strings we allocated.} */
709   for (i = 0; i < nstrings; i++)
710     free (temp_array[i].transformed);
711 @}
712 @end smallexample
713
714 @strong{Compatibility Note:}  The string collation functions are a new
715 feature of ANSI C.  Older C dialects have no equivalent feature.
716
717 @node Search Functions, Finding Tokens in a String, Collation Functions, String and Array Utilities
718 @section Search Functions
719
720 This section describes library functions which perform various kinds
721 of searching operations on strings and arrays.  These functions are
722 declared in the header file @file{string.h}.
723 @pindex string.h
724 @cindex search functions (for strings)
725 @cindex string search functions
726
727 @comment string.h
728 @comment ANSI
729 @deftypefun {void *} memchr (const void *@var{block}, int @var{c}, size_t @var{size})
730 This function finds the first occurrence of the byte @var{c} (converted
731 to an @code{unsigned char}) in the initial @var{size} bytes of the
732 object beginning at @var{block}.  The return value is a pointer to the
733 located byte, or a null pointer if no match was found.
734 @end deftypefun
735
736 @comment string.h
737 @comment ANSI
738 @deftypefun {char *} strchr (const char *@var{string}, int @var{c})
739 The @code{strchr} function finds the first occurrence of the character
740 @var{c} (converted to a @code{char}) in the null-terminated string
741 beginning at @var{string}.  The return value is a pointer to the located
742 character, or a null pointer if no match was found.
743
744 For example,
745 @smallexample
746 strchr ("hello, world", 'l')
747     @result{} "llo, world"
748 strchr ("hello, world", '?')
749     @result{} NULL
750 @end smallexample    
751
752 The terminating null character is considered to be part of the string,
753 so you can use this function get a pointer to the end of a string by
754 specifying a null character as the value of the @var{c} argument.
755 @end deftypefun
756
757 @comment string.h
758 @comment BSD
759 @deftypefun {char *} index (const char *@var{string}, int @var{c})
760 @code{index} is another name for @code{strchr}; they are exactly the same.
761 @end deftypefun
762
763 @comment string.h
764 @comment ANSI
765 @deftypefun {char *} strrchr (const char *@var{string}, int @var{c})
766 The function @code{strrchr} is like @code{strchr}, except that it searches
767 backwards from the end of the string @var{string} (instead of forwards
768 from the front).
769
770 For example,
771 @smallexample
772 strrchr ("hello, world", 'l')
773     @result{} "ld"
774 @end smallexample
775 @end deftypefun
776
777 @comment string.h
778 @comment BSD
779 @deftypefun {char *} rindex (const char *@var{string}, int @var{c})
780 @code{rindex} is another name for @code{strrchr}; they are exactly the same.
781 @end deftypefun
782
783 @comment string.h
784 @comment ANSI
785 @deftypefun {char *} strstr (const char *@var{haystack}, const char *@var{needle})
786 This is like @code{strchr}, except that it searches @var{haystack} for a
787 substring @var{needle} rather than just a single character.  It
788 returns a pointer into the string @var{haystack} that is the first
789 character of the substring, or a null pointer if no match was found.  If
790 @var{needle} is an empty string, the function returns @var{haystack}.
791
792 For example,
793 @smallexample
794 strstr ("hello, world", "l")
795     @result{} "llo, world"
796 strstr ("hello, world", "wo")
797     @result{} "world"
798 @end smallexample
799 @end deftypefun
800
801
802 @comment string.h
803 @comment GNU
804 @deftypefun {void *} memmem (const void *@var{needle}, size_t @var{needle_len},@*const void *@var{haystack}, size_t @var{haystack_len})
805 This is like @code{strstr}, but @var{needle} and @var{haystack} are byte
806 arrays rather than null-terminated strings.  @var{needle_len} is the
807 length of @var{needle} and @var{haystack_len} is the length of
808 @var{haystack}.@refill
809
810 This function is a GNU extension.
811 @end deftypefun
812
813 @comment string.h
814 @comment ANSI
815 @deftypefun size_t strspn (const char *@var{string}, const char *@var{skipset})
816 The @code{strspn} (``string span'') function returns the length of the
817 initial substring of @var{string} that consists entirely of characters that
818 are members of the set specified by the string @var{skipset}.  The order
819 of the characters in @var{skipset} is not important.
820
821 For example,
822 @smallexample
823 strspn ("hello, world", "abcdefghijklmnopqrstuvwxyz")
824     @result{} 5
825 @end smallexample
826 @end deftypefun
827
828 @comment string.h
829 @comment ANSI
830 @deftypefun size_t strcspn (const char *@var{string}, const char *@var{stopset})
831 The @code{strcspn} (``string complement span'') function returns the length
832 of the initial substring of @var{string} that consists entirely of characters
833 that are @emph{not} members of the set specified by the string @var{stopset}.
834 (In other words, it returns the offset of the first character in @var{string}
835 that is a member of the set @var{stopset}.)
836
837 For example,
838 @smallexample
839 strcspn ("hello, world", " \t\n,.;!?")
840     @result{} 5
841 @end smallexample
842 @end deftypefun
843
844 @comment string.h
845 @comment ANSI
846 @deftypefun {char *} strpbrk (const char *@var{string}, const char *@var{stopset})
847 The @code{strpbrk} (``string pointer break'') function is related to
848 @code{strcspn}, except that it returns a pointer to the first character
849 in @var{string} that is a member of the set @var{stopset} instead of the
850 length of the initial substring.  It returns a null pointer if no such
851 character from @var{stopset} is found.
852
853 @c @group  Invalid outside the example.
854 For example,
855
856 @smallexample
857 strpbrk ("hello, world", " \t\n,.;!?")
858     @result{} ", world"
859 @end smallexample
860 @c @end group
861 @end deftypefun
862
863 @node Finding Tokens in a String,  , Search Functions, String and Array Utilities
864 @section Finding Tokens in a String
865
866 @c !!! Document strsep, which is a better thing to use than strtok.
867
868 @cindex tokenizing strings
869 @cindex breaking a string into tokens
870 @cindex parsing tokens from a string
871 It's fairly common for programs to have a need to do some simple kinds
872 of lexical analysis and parsing, such as splitting a command string up
873 into tokens.  You can do this with the @code{strtok} function, declared
874 in the header file @file{string.h}.
875 @pindex string.h
876
877 @comment string.h
878 @comment ANSI
879 @deftypefun {char *} strtok (char *@var{newstring}, const char *@var{delimiters})
880 A string can be split into tokens by making a series of calls to the
881 function @code{strtok}.
882
883 The string to be split up is passed as the @var{newstring} argument on
884 the first call only.  The @code{strtok} function uses this to set up
885 some internal state information.  Subsequent calls to get additional
886 tokens from the same string are indicated by passing a null pointer as
887 the @var{newstring} argument.  Calling @code{strtok} with another
888 non-null @var{newstring} argument reinitializes the state information.
889 It is guaranteed that no other library function ever calls @code{strtok}
890 behind your back (which would mess up this internal state information).
891
892 The @var{delimiters} argument is a string that specifies a set of delimiters
893 that may surround the token being extracted.  All the initial characters
894 that are members of this set are discarded.  The first character that is
895 @emph{not} a member of this set of delimiters marks the beginning of the
896 next token.  The end of the token is found by looking for the next
897 character that is a member of the delimiter set.  This character in the
898 original string @var{newstring} is overwritten by a null character, and the
899 pointer to the beginning of the token in @var{newstring} is returned.
900
901 On the next call to @code{strtok}, the searching begins at the next
902 character beyond the one that marked the end of the previous token.
903 Note that the set of delimiters @var{delimiters} do not have to be the
904 same on every call in a series of calls to @code{strtok}.
905
906 If the end of the string @var{newstring} is reached, or if the remainder of
907 string consists only of delimiter characters, @code{strtok} returns
908 a null pointer.
909 @end deftypefun
910
911 @strong{Warning:} Since @code{strtok} alters the string it is parsing,
912 you always copy the string to a temporary buffer before parsing it with
913 @code{strtok}.  If you allow @code{strtok} to modify a string that came
914 from another part of your program, you are asking for trouble; that
915 string may be part of a data structure that could be used for other
916 purposes during the parsing, when alteration by @code{strtok} makes the
917 data structure temporarily inaccurate.
918
919 The string that you are operating on might even be a constant.  Then
920 when @code{strtok} tries to modify it, your program will get a fatal
921 signal for writing in read-only memory.  @xref{Program Error Signals}.
922
923 This is a special case of a general principle: if a part of a program
924 does not have as its purpose the modification of a certain data
925 structure, then it is error-prone to modify the data structure
926 temporarily.
927
928 The function @code{strtok} is not reentrant.  @xref{Nonreentrancy}, for
929 a discussion of where and why reentrancy is important.
930
931 Here is a simple example showing the use of @code{strtok}.
932
933 @comment Yes, this example has been tested.
934 @smallexample
935 #include <string.h>
936 #include <stddef.h>
937
938 @dots{}
939
940 char string[] = "words separated by spaces -- and, punctuation!";
941 const char delimiters[] = " .,;:!-";
942 char *token;
943
944 @dots{}
945
946 token = strtok (string, delimiters);  /* token => "words" */
947 token = strtok (NULL, delimiters);    /* token => "separated" */
948 token = strtok (NULL, delimiters);    /* token => "by" */
949 token = strtok (NULL, delimiters);    /* token => "spaces" */
950 token = strtok (NULL, delimiters);    /* token => "and" */
951 token = strtok (NULL, delimiters);    /* token => "punctuation" */
952 token = strtok (NULL, delimiters);    /* token => NULL */
953 @end smallexample