123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- .TH STRCAT 2
- .SH NAME
- strcat, strncat, strcmp, strncmp, cistrcmp, cistrncmp, strcpy, strncpy, strecpy, strlen, strchr, strrchr, strpbrk, strspn, strcspn, strtok, strdup, strstr, cistrstr \- string operations
- .SH SYNOPSIS
- .B #include <u.h>
- .br
- .B #include <libc.h>
- .PP
- .ta \w'\fLchar* \fP'u
- .B
- char* strcat(char *s1, const char *s2)
- .PP
- .B
- char* strncat(char *s1, const char *s2, long n)
- .PP
- .B
- int strcmp(const char *s1, const char *s2)
- .PP
- .B
- int strncmp(const char *s1, const char *s2, long n)
- .PP
- .B
- int cistrcmp(const char *s1, const char *s2)
- .PP
- .B
- int cistrncmp(const char *s1, const char *s2, long n)
- .PP
- .B
- char* strcpy(char *s1, const char *s2)
- .PP
- .B
- char* strecpy(char *s1, char *es1, const char *s2)
- .PP
- .B
- char* strncpy(char *s1, const char *s2, long n)
- .PP
- .B
- long strlen(const char *s)
- .PP
- .B
- char* strchr(const char *s, char c)
- .PP
- .B
- char* strrchr(const char *s, char c)
- .PP
- .B
- char* strpbrk(const char *s1, const char *s2)
- .PP
- .B
- long strspn(const char *s1, const char *s2)
- .PP
- .B
- long strcspn(const char *s1, const char *s2)
- .PP
- .B
- char* strtok(char *s1, char *s2)
- .PP
- .B
- char* strdup(const char *s)
- .PP
- .B
- char* strstr(const char *s1, const char *s2)
- .PP
- .B
- char* cistrstr(const char *s1, const char *s2)
- .SH DESCRIPTION
- The arguments
- .I s1, s2
- and
- .I s
- point to null-terminated strings.
- The functions
- .IR strcat ,
- .IR strncat ,
- .IR strcpy ,
- .IR strecpy ,
- and
- .I strncpy
- all alter
- .IR s1 .
- .I Strcat
- and
- .I strcpy
- do not check for overflow of
- the array pointed to by
- .IR s1 .
- .PP
- .I Strcat
- appends a copy of string
- .I s2
- to the end of string
- .IR s1 .
- .I Strncat
- appends at most
- .I n
- bytes.
- Each returns a pointer to the null-terminated result.
- .PP
- .I Strcmp
- compares its arguments and returns an integer
- less than, equal to, or greater than 0,
- according as
- .I s1
- is lexicographically less than, equal to, or
- greater than
- .IR s2 .
- .I Strncmp
- makes the same comparison but examines at most
- .I n
- bytes.
- .I Cistrcmp
- and
- .I cistrncmp
- ignore ASCII case distinctions when comparing strings.
- The comparisons are made with unsigned bytes.
- .PP
- .I Strcpy
- copies string
- .I s2
- to
- .IR s1 ,
- stopping after the null byte has been copied.
- .I Strncpy
- copies exactly
- .I n
- bytes,
- truncating
- .I s2
- or adding
- null bytes to
- .I s1
- if necessary.
- The result will not be null-terminated if the length
- of
- .I s2
- is
- .I n
- or more.
- Each function returns
- .IR s1 .
- .PP
- .I Strecpy
- copies bytes until a null byte has been copied, but writes no bytes beyond
- .IR es1 .
- If any bytes are copied,
- .I s1
- is terminated by a null byte, and a pointer to that byte is returned.
- Otherwise, the original
- .I s1
- is returned.
- .PP
- .I Strlen
- returns the number of bytes in
- .IR s ,
- not including the terminating null byte.
- .PP
- .I Strchr
- .RI ( strrchr )
- returns a pointer to the first (last)
- occurrence of byte
- .I c
- in string
- .IR s ,
- or
- .L 0
- if
- .I c
- does not occur in the string.
- The null byte terminating a string is considered to
- be part of the string.
- .PP
- .I Strpbrk
- returns a pointer to the first occurrence in string
- .I s1
- of any byte from string
- .IR s2 ,
- .L 0
- if no byte from
- .I s2
- exists in
- .IR s1 .
- .PP
- .I Strspn
- .RI ( strcspn )
- returns the length of the initial segment of string
- .I s1
- which consists entirely of bytes from (not from) string
- .IR s2 .
- .PP
- .I Strtok
- considers the string
- .I s1
- to consist of a sequence of zero or more text tokens separated
- by spans of one or more bytes from the separator string
- .IR s2 .
- The first call, with pointer
- .I s1
- specified, returns a pointer to the first byte of the first
- token, and will have written a
- null byte into
- .I s1
- immediately following the returned token.
- The function
- keeps track of its position in the string
- between separate calls; subsequent calls,
- signified by
- .I s1
- being
- .LR 0 ,
- will work through the string
- .I s1
- immediately following that token.
- The separator string
- .I s2
- may be different from call to call.
- When no token remains in
- .IR s1 ,
- .L 0
- is returned.
- .PP
- .I Strdup
- returns a pointer to a distinct copy of the null-terminated string
- .I s
- in space obtained from
- .IR malloc (2)
- or
- .L 0
- if no space can be obtained.
- .PP
- .I Strstr
- returns a pointer to the first occurrence of
- .I s2
- as a substring of
- .IR s1 ,
- or 0 if there is none.
- If
- .I s2
- is the null string,
- .I strstr
- returns
- .IR s1 .
- .I Cistrstr
- operates analogously, but ignores ASCII case differences when comparing strings.
- .SH SOURCE
- All these routines have portable C implementations in
- .BR /sys/src/libc/port .
- Many also have machine-dependent assembly language
- implementations in
- .BR /sys/src/libc/$objtype .
- .SH SEE ALSO
- .IR memory (2),
- .IR rune (2),
- .IR runestrcat (2),
- .IR string (2)
- .SH BUGS
- These routines know nothing about
- .SM UTF.
- Use the routines in
- .IR rune (2)
- as appropriate.
- Note, however, that the definition of
- .SM UTF
- guarantees that
- .I strcmp
- compares
- .SM UTF
- strings correctly.
- .PP
- The outcome of overlapping moves varies among implementations.
|