strlen , strnlen , strchr , strrchr , strpbrk , strspn , strcspn , strstr , strtok 或 strsep 子例程

用途

确定内存中字符串的大小,位置和存在情况。

标准 C 库 (libc.a)

语法

#include <string.h>

size_t strlen (String)
const char *String;

size_t strnlen (String, maxlen)
const char *String;
size_t maxlen;

char *strchr (String, Character)
const char *String;
int Character;

char *strrchr (String, Character)
const char *String;
int Character;

char *strpbrk (String1, String2)
const char *String1, String2;

size_t strspn (String1, String2)
const char *String1, * String2;

size_t strcspn (String1, String2)
const char *String1, *String2;

char *strstr (String1, String2)
const char *String1, *String2;

char *strtok (String1, String2)
char *String1;
const char *String2;

char *strsep (String1, String2)
char **String1;
const char *String2;

char *index (String, Character)
const char *String;
int Character;

char *rindex (String, Character)
const char *String;
int Character;

描述

注意: 请勿在多线程环境中使用 strtok 子例程。 请改为使用 strtok_r 子例程。

strlenstrnlenstrchrstrrchrstrpbrkstrspnstrcspnstrstrstrtok 子例程确定诸如大小,位置和内存中是否存在字符串之类的值。

String1String2 字符串 参数指向字符串。 字符串是由空字符终止的字符数组。

strlen 子例程返回由 String 参数指向的字符串中的字节数,不包括终止空字节。

strnlen 函数返回一个整数,其中包含 Stringmaxlen所指向的字符串长度中的较小值 (不包括终止的空字节)。

strchr 子例程返回一个指针,该指针指向 String 参数指向的字符串中第一次出现由 Character (转换为无符号字符) 参数指定的字符。 如果字符串中未出现该字符,那么将返回空指针。 终止字符串的空字节被视为字符串的一部分。

strrchr 子例程返回一个指针,该指针指向 String 参数指向的字符串中最后出现的由 Character (转换为字符) 参数指定的字符。 如果字符串中未出现该字符,那么将返回空指针。 终止字符串的空字节被视为字符串的一部分。

斯特普布尔克 子例程返回一个指针,该指针指向 String2 参数所指向的字符串中的任何字节的 String1 参数所指向的字符串中的第一次出现。 如果没有任何字节匹配,那么将返回空指针。

strspn 子例程返回由 String1 参数指向的字符串的初始段的长度。 它完全由 String2 参数所指向的字符串中的字节组成。

strcspn 子例程返回由 String1 参数指向的字符串的初始段的长度。 它完全由 String2 参数所指向的字符串中的字节 组成。

斯特斯特尔 子例程在由 String2 参数所指向的字符串 (不包括终止空字符) 所指定字节序列的 String1 参数所指向的字符串中找到第一次出现。 它返回指向在 String1 参数中找到的字符串的指针,如果找不到该字符串,那么返回空指针。 如果 String2 参数指向 0 长度的字符串,那么 strstr 子例程将返回 String1 参数的值。

strtok 子例程将 String1 参数所指向的字符串分解成一系列标记。 其中每个参数都由 String2 参数所指向的字符串中的字节定界。 序列中的第一个调用将 String1 参数作为其第一个自变量,后跟以空指针作为其第一个自变量的调用。 String2 参数指向的分隔符字符串可能与要调用的字符串不同。

序列中的第一个调用将在 String1 参数中搜索 String2 参数所指向的当前分隔符字符串中未包含的第一个字节。 如果找不到此类字节,那么 String1 参数所指向的字符串中不存在任何标记,并且将返回空指针。 如果找到这样的字节,那么它是第一个令牌的开始。

然后, strtok 子例程从第一个标记搜索当前分隔符字符串中包含的字节。 如果找不到此类字节,那么当前令牌将扩展至 String1 参数指向的字符串末尾,并且后续搜索令牌将返回空指针。 如果找到这样的字节, strtok 子例程用空字节覆盖它,这将终止当前令牌。 strtok 子例程保存指向以下字节的指针,将从该字节开始下一次对令牌的搜索。 子例程返回指向令牌的第一个字节的指针。

使用空指针作为第一个自变量的值的每个后续调用都会从保存的指针开始搜索,并将其用作第一个标记。 否则,子例程的行为不会更改。

strsep 子例程从由 String2定界的字符串 String1 返回下一个标记。 令牌终止\0字符和 String1 将更新为指向令牌之后的位置。 strsep 子例程返回指向令牌的指针,如果在 String1中找不到 String2 ,那么返回 NULL。

包含 indexrindexstrsep 子例程是为了与 BSD 兼容,并且不是 ANSI C 库的一部分。 index 子例程实现为对 strchr 子例程的调用。 rindex 子例程实现为对 strrchr 子例程的调用。

参数

描述
字符 指定要返回指针的字符。
String 指向从中返回数据的字符串。
String1 指向操作从中返回结果的字符串。
String2 指向包含操作源的字符串。

错误代码

strlenstrnlenstrchrstrrchrstrpbrk, 如果发生以下情况, strspnstrcspnstrstrstrtok 子例程将失败:

描述
Efault 字符串参数是无效地址。