C语言09、字符串函数和内存函数

字符函数和字符串函数

求字符串长度(strlen)

size_t strlen(const char* str);

1.字符串已经'\0'作为结束标志,strlen函数返回的是在字符串中'\0'前面出现的字符个数(不包含'\0')

2.参数指向的字符串必须要以'\0'结束

3.注意函数的返回值是size_t,是无符号的

拷贝字符串(strcpy)

char* strcpy(char* destination, const char* source);

1.将源字符串复制到目标中,包括终止的空字符(并在该处停止)。

2.源字符串必须以'\0'结束

3.会将源字符串中的'\0'拷贝到目标空间

4.目标空间必须足够大,以确保能存放源字符串

5.目标空间必须可变

strncpy

char* strncpy(char* destination, const char* source, size_t num);

1.将源字符串的前num个字符复制到目标,如果赋值前num个字符时源字符串已经结束,则在目标处用'\0'填充,知道共计num个为止(拷贝num个字符从源字符串到目标空间

如果源字符串的长度小于num,则拷贝完源字符串之后,在后面追加0,直到num个)

连接字符串(strcat)

char* strcat(char* destination, const char* source)

1.将源字符串的副本追加到目标字符串。 目标中的终止空字符将被源的第一个字符覆盖,并在目标中的这两个字符串联形成的新字符串的末尾包含一个空字符。

2.源字符串必须以'\0'结束

3.目标空间必须足够大,能容纳下源字符串的内容

4.目标空间必须可修改

5.字符串不能自己给自己追加

strncat

char* strncat(char* destination, const char* source, size_t num);

1.将源字符串的前num个字符附加到目标,再加上一个终止的空字符

2.如果源字符串的长度小于num,则只复制到'\0'之前就停止

字符串比较(strcmp)

int strcmp(const char* str1, const char* str2);

1.这个函数比较每个字符串的第一个字符。 如果它们相等,则继续处理各自往后的一对字符,直到字符不同或达到终止的空字符。

2. 第一个字符串大于第二个字符串,则返回大于0的数字

3.第一个字符串等于第二个字符串,则返回0

4.第一个字符串小于第二个字符串,则返回小于0的数字

strncmp

int strncmp(const char* str1, const char* str2, size_t num);

比较前num个字符

在字符串中查找字符串(strstr)

char* strstr(const char* str1, const char* str2);

返回str1中第一个出现str2的指针,如果str2不是str1的一部分,则返回空指针

可以做分隔符的(strtok)

char* strtok(char* str, const char* sep);

1.sep参数是个字符串,定义了用作分隔符的字符集合

2.第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分割符分割的标记

3.strtok函数找到str中的下一个标记,并将其用'\0'结尾,返回一个指向这个标记的指针。(注意:strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改)

4.strtok函数的第一个参数不为NULL,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置

5.strtok函数的第一个参数为NULL,函数将在同一个字符串中被保存的位置开始,查找下一个标记

6.如果字符串中不存在更多的标记,返回NULL指针

用来对库函数报错的strerror

char* strerror(int errnum)

返回错误码、所对应的错误信息

#include <stdio.h>
#include <string.h>
#include <errno.h>//必须包含的头文件
int main ()
{
    FILE * pFile;
    pFile = fopen ("unexist.ent","r");
    if (pFile == NULL)
    printf ("Error opening file unexist.ent: %s\n",strerror(errno));
    //errno: Last error number
    return 0; 
}

内存操作函数

memcpy

void* memcpy(void* destination, const void* source, size_t num);

1.函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置

2.这个函数在遇到'\0'的时候并不会停下来

3.如果source和destination有任何的重叠,复制的结果都是未定义的

memmove

void* memmove(void* destination, const void* source, size_t num);

1.和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的

2.如果源空间和目标空间出现重叠,接得使用memmove函数处理

memcmp

int memcmp(const void* ptr1, const void* ptr2, size_t num);

1.比较从ptr1和ptr2指针开始的num个字节

2.一次比较第x个字节的大小,若ptr1>ptr2,则返回大于0的值,若等于,则返回0,若小于,则返回小于0的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

列宁格勒的街头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值