C语言

详解C语言字符串、字符、字节

2017-10-16  本文已影响126人  d9fc24a0c9a9

字符串基础

字符串是一串零个或多个字符,并且以一个位模式为全0的NULL字节结尾。

字符串的长度

字符串的长度就是它所包含的字符个数,通常使用函数strlen来计算字符串的长度。

sizet_t strlen(char const *string);

size_t定义在stddef.h中,它是一个无符号整数类型。
  在表达式中使用无符号数可能导致不必要的 结果,如下:

if(strlen(x) >= strlen(y))...
if(strlen(x) - strlen(y) >= 0)...

第二条语句永远为真,因为strlen(x)/strlen(y)的返回值都是无符号数,所以>=左边是无符号数,无符号数不可能小于零。

不受限制的字符串函数

最常用的字符串函数都是不受限制的,就是说它们只是通过寻找字符串参数结尾的NULL来判断呢它的长度。在使用这些函数时,必须要保证结果字符串不会溢出内存

复制字符串

用于复制字符串常用的函数时strcpy,函数原型如下:

char  *strcpy(char *dst,char *src);

连接字符串

把一个字符连接到一个字符后面,可以使用strcat函数,其原型如下:

char *strcat(char *des,char *src);

字符串的比较

比较字符串所使用的函数是strcmp,这个函数按字典顺序逐个比较字符,其原型如下:

int strcmp(char const *s1,char const *s2);

长度受限制的字符串函数

标准库还包含了一些函数,这些函数接受一个显式的长度参数,用于限定金系能复制或比较的字符串的字符数,他们的原型如下:

char *strncpy(char *dst,char connst *src,size_t len);
char *strncat(char *dst,char connst *src,size_t len);
int strncmp(char const *s1,char const *s2,size_t len);

注意,在strncpy函数中:

字符串查找基础

查找一个字符

在一个字符串中查找一个特定的字符最常使用的就是strchr和strrchr函数,其原型如下:

char *strstr(char const *str,int ch);
char *strstr(char const *str,innt ch);

查找任何几个字符

查找任何一组字符第一次出现在字符串中的位置使用函数strpbrk,其原型如下:

char *strpbrk(char const *str,char cont *group);

查找一个字符串

strstr函数用于查找一个字符串,其原型如下:

char *strstr(char const *s1,char const *s2);

错误信息

strerror函数把操作系统设置的外部整形变量error其中的一个作为参数并返回一个指向用于描述错误的字符串的指针,其原型如下:

char *strerror(int error_number);

字符操作

标准库包含了两组函数,用于操作单独的字符,他们的原位于ctype.h中,第一组用于字符分类/判断,第二组用于转换字符。

字符分类

函数 如果它的参数符合下列条件就返回为真
iscntrl 任何控制字符
isspace 空白字符,空格 ' ',换页'\f',换行'\n',回车'\r',制表符/垂直制表符 '\t'/'v'
isdigit 数字0-9
isxdigit 十六进制数字,数字0-9,小写字母a-f,大写字母A-F
islower 小写字母a-a
isupper 大写字母A-Z
isalpha 字母a-z,A-Z
isalnum 字母或数字,a-z或0-9
ispunct 标点符号,任何不属于字母或数字的图形字符(可打印符号)
isgraph 任何图形字符
isprint 任何可打印字符,包括图形字符或空白字符

字符转换

  转化函数把大写字母转换成小写字母或小写字母转换成大写字母

int tolower(int ch);
int toupper(int ch);

内存操作

  当字符串中函含有NULL字符,此时将不能在使用字符串操作函数,内存操作函数将任意的字符串序列,包含字符串中含有NULL字符的字符串,它们的函数原型如下:

void *memcpy(void *dst,void const *src,size_t length);
void *memmove(void *dst,void const *src,size_t length);
void *memcmp(void const *a,void const *b,size_t length);
void *memchr(void const *a,int ch ,size_t length);
void *memset(void *a,int ch,size_t length );
memset(buffer,0,SIZE);
上一篇 下一篇

猜你喜欢

热点阅读