【C】C语言中的字符串操作函数

来源:互联网 发布:dtxmania软件下载 编辑:程序博客网 时间:2024/05/18 02:02

标准库默认集合的不安全性

它们使代码包含错误的可能性很大;在网络环境下使用,它们允许恶意代码破坏程序。

主要原因是,无法验证数组有足够的空间执行操作。


C11可选版本

它们会检查数组的维数,确保它们足够大。相比较标准库,主要是添加了数组大小的参数。


检查对C11的支持

编译并执行下列代码

#include<stdio.h>int main(){#if defined_STDC_LIB_EXT1_    printf("Optional functions are defined.\n");#else    printf("Optional functions are not defined.\n");#endif // defined_STDC_LIB_EXT1_    return 0;}
要使用string.h中的可选函数,必须在string.h的include语句之前,在源文件中定义_STDC_WANT_LIB_EXT1_符号,来表示值1,如下所示:
#define _STDC_WANT_LIB_EXT1_ 1#include<string.h>
使用这个机制的原因是,它不会中断推出C11标准之前编写的旧代码。

把_STDC_WANT_LIB_EXT1_定义为0,就可以禁用可选函数。


字符串操作

头文件

#include<string.h>


确定字符串的长度

可选函数:size_t strnlen_s(字符串的地址,数组的大小)

返回值:字符串的大小

知道数组的大小,若字符串结尾没有'\0',函数就可以避免访问最后一个元素后面的内存。


标准函数:strlen(字符串的地址)


复制字符串

可选函数:int strcpy_s(目标字符串的地址,第一个参数的大小,源字符串的地址)

返回值:如果一切正常,就返回0,否则返回非0整数值

指定字符串的长度,就可以避免函数覆盖字符串中最后一个字符后面的内存


可选函数:strncpy_s(目标字符串的地址,第一个参数的大小,源字符串的地址,复制的最大字符数)

如果在复制指定的最大字符数之前,在源字符串中找到了'\0',复制就停止,并把'\0'添加到目标字符串的末尾


标准函数:strcpy(目标字符串地址,源字符串地址)


连接字符串

可选函数:strcat_s(要添加新字符串的字符串地址,第一个参数的大小,要添加到第一个参数中的字符串地址)

返回值:如果一切正常就返回0

该操作把str2复制到str1的末尾,覆盖str1中的'\0',再在最后添加一个'\0'


可选函数:strncpy_s(要添加新字符串的字符串地址,第一个参数的大小,要添加到第一个参数中的字符串地址,要连接的最大字符数)

该函数把str2的一部分连接到str1上


标准函数:strcat(str1,str2)


比较字符串

标准函数:strcmp(str1,str2)

返回值:返回一个小于、等于或大于0的值,分别对应str1小于、等于和大于str2

没有可选函数


标准函数:strncmp(str1,str2,指定要比较的字符数)


搜索字符串

搜索字符串中的一个字符

标准函数:strchr(要搜索的字符串,(int类型)要查找的字符)

返回值:从字符串的开头开始搜索,返回在字符串中找到的第一个给定字符的地址。如果没有找到,就返回NULL


标准函数:strrchr(要搜索的字符串,要查找的字符)

返回值:返回字符串中最后一个给定字符串的地址,如果找不到就返回NULL

从字符串的末尾开始查找

在字符串中查找子字符串

标准函数:strstr(要搜索的字符串,要查找的子字符串)

返回值:返回找到的第一个子字符串的位置指针。如果找不到就返回NULL


单元化字符串

可选函数:(第一次调用)strtok_s(要单元化的字符串的地址,数组大小,所有可能界定符的字符串的地址,指向char*的指针)

                   (后续调用)strtok_s(NULL,数组大小,所有可能界定符的字符串的地址,指向char*的指针)

返回值:返回char*类型的指针,指向标记的第一个字符,如果没有找到就返回NULL


分析和转换字符串

转换字符的大小写形式

头文件:ctype.h

标准函数:toupper(字母),tolower(字母)

返回值:返回转换后的int类型字符

将字符串转换成数值

头文件:stdlib.h

标准函数                     返回值

atof()                           从字符串中生成的double类型的值。double值“无穷大”表示为INF或INFINITY,“not a number”表示为NAN

atoi()                           从字符串中生成的int类型的值

atol()                           从字符串中生成的long类型的值

atoll()                          从字符串中生成的long long类型的值

这4个函数会忽略前导空白,也忽略不能构成数值一部分的字符后面的所有字符

0 0
原创粉丝点击