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