部分字符串和内存操作函数

部分字符串和内存操作函数

字符串函数strtok

char* strtok(char* str,const char* sep);
  • sep参数是一个字符串,定义了用作分隔符的字符集合
  • 第一个参数指定一个字符串,即要被分割的字符串
  • 这个函数很特殊,它具有记忆功能,当它第一次使用时,他会找到一个分隔符的位置并且记下来。当第二次调用时,此时不需要再传一个参数,函数会自动在同一个字符中的保存位置开始寻找第二个分隔符的位置,并返回指向标记的指针,如果字符串中不存在更多标记,则返回NULL指针。
  • 需要注意的是,由于函数会修改字符串,所以一般操作的都是字符串的拷贝
int main()
{
	char* p = "hangtinglong@qq.com";
	const char* sep = "@.";
	char arr[30];
	char* str = NULL;
	strcpy(arr, p);
	for (str = strtok(arr, sep); str != NULL; str = strtok(NULL, sep)) {
		printf("%s\n", str);
	}
}

效果如下图:
在这里插入图片描述

字符串函数strerror

char* strerroe(int errnum);

返回错误码,所对应的错误信息。

int main()
{
	FILE* pFile;
	pFile = fopen("unexist.txt", "r");
	if (pFile == NULL) {
		printf("错误信息是:%s\n", strerror(errno));
	}
	return 0;
}

当此时的文件夹中并没有这个文件时,运行结果如下:

在这里插入图片描述

  • 与上面相对应的还有一个perror函数
#include <stdio.h>

int main ()
{
  FILE * pFile;
  pFile=fopen ("unexist.txt","rb");
  if (pFile==NULL)
    perror ("The following error occurred");
  else
    fclose (pFile);
  return 0;
}

perror函数将自动打印处此时的错误信息

内存操作函数

memcpy

void* memcpy(void* destination,const coid* source,size_t num);
  • 函数从source的位置开始向后复制num个字节的内容到destination中。
  • 这个函数在遇到/0时并不会停下来
  • 如果source和destination有重叠,用memmove函数
struct {
	char name[40];
	int age;
}person,person_copy;

int main()
{
	char myname[] = "Pierre de Fermat";

	memcpy(person.name, myname, strlen(myname) + 1);
	person.age = 46;
	//先复制字符串
	memcpy(&person_copy, &person, sizeof(person));
	//再复制结构体
	printf("person_copy:%s,%d\n", person_copy.name, person_copy.age);

	return 0;
}

memmove

void* memmove(void* destination,const void* source,size_of num);
  • 与memcpy的区别在于,memmove函数处理的源内存块和目标内存块是可以重叠的。
int main() {
	char str[] = "memmove can be very useful......";
	memmove(str + 20, str + 15, 11);
	puts(str);
	return 0;
}

memcmp

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

比较从ptr1和ptr2指针开始的num个字节
返回值三种类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值