str 开头库函数

C语言 str 开头库函数

使用方法记录

1 strpbrk

函数原型:char *strpbrk(const char *s, const char *accept);
函数说明:strpbrk()函数在字符串s中找到字符串accept中任何字节的第一个匹配项。
例子:

#include <stdio.h>
#include <string.h>
int main()
{
    char *str_1 = "Hello CSDN!";
    char *str_2 = "Csdn";
    char *re_str = NULL;

    re_str = strpbrk(str_1, str_2);

    printf("%s\n", re_str == NULL ? "Not find": re_str);
    return 0;
}

输出:
CSDN!
注意,这个函数关注大小写,如果没有找到则会返回 ‘null’
2. strsep
例子:

#include <stdio.h>
#include <string.h>

int main()
{
    char *source = "hello, world! welcome to CSDN";
	char delim[] = "!";
    char *s = NULL;
    char *re_str = NULL;

    s = strdup(source);
    printf("%s\n", s);
    re_str = strsep(&s, delim);

    printf("%s\n", re_str == NULL ? "Not find": re_str);
    printf("%s\n", s);
    return 0;
}

输出:
hello, world! welcome to CSDN
hello, world
welcome to CSDN

2 strdup & strndup & strdupa & strndupa

函数原型 :
char *strdup(const char *s);
char *strndup(const char *s, size_t n);
char *strdupa(const char *s);
char *strndupa(const char *s, size_t n);

函数说明:
这4个函数申请新的内存并拷贝参数中的字符串到新内存中。
如内存不能成功申请返回 ‘NULL’ ,并设置errorno 的值。如申请成功,则返回指向新的字符串的指针。
最后一个字母是 ‘a’ 的函数是使用alloca进行内存申请,前两个实现是使用malloc进行实现。 使用后注意要使用free进行释放内存。

例子:

int main ()
{
    char str[] = "Hello CSDN !";
    char *str_dup = NULL;

    str_dup = strdup(str);
    printf("str_dup = %s\n", str_dup);
    printf("str = %s\n", str);

    str[0] = 'h';
    printf("str_dup = %s\n", str_dup);
    printf("str = %s\n", str);

    free(str_dup);

    return 0;
}

输出:
str_dup = Hello CSDN !
str = Hello CSDN !
str_dup = Hello CSDN !
str = hello CSDN !

3 strstr & strcasestr

函数原型:
char *strstr(const char *haystack, const char *needle);
char *strcasestr(const char *haystack, const char *needle);

函数说明:
从haystack 字符串参数中找到needle参数的子串。找到了返回指向找到字串的首个字符的指针,否则返回NULL。
strcasestr 与 strstr 类似,只是strcasestr不关心字符串的大小写。

例子:

int main ()
{
    char str[] = "Hello CSDN !";
    char str2[] = "cSDN";
    char *str_re = NULL;

    str_re = strcasestr(str, str2);
    printf("output = %s\n", str_re);

    return 0;
}

输出:
output = CSDN !

特别注意 :
需要在最前面(#define <string.h>之前加上#define _GNU_SOURCE),要不然会出现警告,很可能导致执行时错误。详见 man 7 feature_test_macros

4 strcspn & strspn

**函数原型: **
size_t strspn(const char *s, const char *accept);
size_t strcspn(const char *s, const char *reject);

函数说明:
strspn 是在s 中,从s字符串的开始找出与accept字符串相同的字符数量。s的开始必须和accept一样,否则会返回0 。
strcspn 是在s 中,从s字符串的开始找出与accept字符串不相同的字符数量。s的开始必须和accept不一样,否则返回0 。
也就是说当两个字符串完全相等的时候 strspn 相当于 strlen(s) 或者strlen(accept)。accept为空字符串时strcspn 相当于strlen(s)。

例子(strspn):

int main ()
{
    char str[] = "Hello CSDN !";
    char str2[] = "HE";
    int re;

    re = strspn(str, str2);
    printf("output = %d\n", re);

    return 0;
}

输出:
output = 1 (注意,这里是大小写敏感的)

例子 (strcspn):

int main ()
{
    char str[] = "Hello CSDN !";
    char str2[] = "llo";
    int re;

    re = strcspn(str, str2);
    printf("output = %d\n", re);

    return 0;
}

输出:
output = 2

5 strtok & strtok_r

**函数原型: **
char *strtok(char *str, const char *delim);
char *strtok_r(char *str, const char *delim, char **saveptr);

**函数说明: **
在字符串str中找到第一个以delim字符作为分隔符的子串。返回指向字串的指针。
strtok_r 为 strtok 的可重入(reentrant)版本。saveptr 是一个临时的内存空间,这个空间由用户给出。

注意:
经过测试,该函数只是简单的将第一次出现分隔字符的位置的字符替换为 ‘\0’ ,实际后面的字符还是存在的,具体看看例子就明白了。

例子(strtok):

int main ()
{
    char str[] = "Hello CSDN !";
    char str2[] = "o";
    char * re;

    re = strtok(str, str2);
    printf("output = %s\n", re);
    printf("output1 = %s\n", str);
    printf("output2 = %c\n", str[4]);
    printf("output2 = %s\n", &str[5]);
    return 0;
}

输出:
output = Hell
output1 = Hell
output2 =
output2 = CSDN !

6 strtod & strtof & strtold

函数原型:
double strtod(const char *nptr, char **endptr);
float strtof(const char *nptr, char **endptr);
long double strtold(const char *nptr, char **endptr);

函数说明:
将nptr指向的字符串参数转换成double 、 float 、 long double的数字。endptr指向需要转换数字之后的一个字符位置。

例子(strtod):

int main ()
{
    char *str = "123.321 CSDN";
    char * tmp = NULL;
    double num = 0;

    num = strtod(str, &tmp);

    printf("num =  %.3f\n", num);
    printf("str = %s\n", str);
    printf("tmp = %s\n", tmp);

    return 0;
}

输出:
num = 123.321
str = 123.321 CSDN
tmp = CSDN

7 strtol & strtoll

**函数原型: **
long int strtol(const char *nptr, char **endptr, int base);
long long int strtoll(const char *nptr, char **endptr, int base);

函数说明:
这两个函数都是将前面nptr的参数前面的字符串转换为int类型的数。和strtod类似,不同的是,strtol使用第三个参数来指定按照某种进制来进行字符串到数字的转换(2到36)。strtoll返回值可以看出,其可以转换更大的数字。

例子:

int main()
{
    int num = 0;
    char str[] = "-fffFHELLO CSDN!\n";
    char *endptr = NULL;

    num = strtol(str, &endptr, 16);

    printf("num = %d\n", num);
    printf("endptr = %s\n", endptr);

    return 0;
}

输出:
num = -65535
endptr = HELLO CSDN!

注意,被转换的字符串可以带有 正 / 负 号。

8 strtoul & strtoull

**函数原型: **
unsigned long int strtoul(const char *nptr, char **endptr, int base);
unsigned long long int strtoull(const char *nptr, char **endptr, int base);

函数说明:
和strtol基本相同,但是返回值为unsigned int类型。

例子:

int main()
{
    unsigned int num = 0;
    char str[] = "-0xfffFHELLO CSDN!\n";
    char *endptr = NULL;

    num = strtoul(str, &endptr, 16);

    printf("num = %d\n", num);
    printf("endptr = %s\n", endptr);

    return 0;
}

输出:
num = -65535
endptr = HELLO CSDN!

虽然返回的是unsigned int 类型,但是编译器自动将unsigned int返回值提升到 int类型。

9 strerror

函数原型:
char *strerror(int errnum);

函数说明:
该函数将errno 的值转换为可供是阅读的字符串。还与之相匹配的可重入(reentrant) 函数 strerror_r。

例子:

int main()
{
    int my_errno = EAGAIN;

    printf("%s\n", strerror(my_errno));

    return 0;
}

输出:
Resource temporarily unavailable

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值