栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【逆向|C语言】C语言字符串库函数以及函数指针

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【逆向|C语言】C语言字符串库函数以及函数指针

目录

一.C语言字符串库函数

1.如何查看库函数用法

2.C语言字符串库函数

 <1>.strcpy

<2>.strncpy

<3>.strcat

<4>.strncat

<5>.strcmp

<6>.strncmp

<7>.strlen

<8>.strset

<9>.memcpy

<10>.memset

<11>.strlwr

<12>.strupr

二.函数指针


一.C语言字符串库函数

1.如何查看库函数用法

拿strcpy举例,

第一步:如下图所示,把光标放在strcpy上按F1

 第二步:按F1后会打开msdn,选择中间的windows CE,按显示.

 第三步:查看包含的头文件,返回值,参数,不怎么会英文的可以复制到百度里面查看

所有的库函数都可以按以上方式查看,下面介绍几个常用的C语言字符串库函数

2.C语言字符串库函数

 <1>.strcpy

strcpy:拷贝字符串

#include "stdafx.h"
#include 
int fun()
{
	char dest[10];
	const char*src="adfsfdv";
	strcpy(dest,src);
	printf("%stn",dest);
	return 0;
}

<2>.strncpy

strncpy:将指定长度的字符串复制到字符数组中

int fun()
{
	char dest[10];
	const char*src="adfsfdv";
	strncpy(dest,src,4);
	dest[4]='';
	printf("%stn",dest);
	return 0;
}

特别注意dest[4]='';字符串都是以''结束

<3>.strcat

strcat:字符串连接

​
int fun()
{
	char dest[20]="12354";
	const char*src="adfsfdv";
	strcat(dest,src);
	printf("%stn",dest);
	return 0;
}

​

strcatd注意的是d必须有足够的空间来容纳s的字符串.

<4>.strncat

strncat:主要功能是在字符串的结尾追加n个字符

int fun()
{
	char dest[20]="12354";
	const char*src="adfsfdv";
	strncat(dest,src,3);
	printf("%stn",dest);
	return 0;
}

这个自动加的'',不需要自己加,把src所指字符串的前n个字符添加到dest所指字符串的结尾处,并覆盖dest所指字符串结尾的'',从而实现字符串的连接

<5>.strcmp

strcmp:字符串比较,用于比较两个字符串并根据比较结果返回整数。基本形式为strcmp(str1,str2),若str1=str2,则返回零;若str1str2,则返回正数

int fun()
{

	char str1[5]="abcd";
	char str2[5]="1234";
	int ret;
	ret=strcmp(str1,str2);
	printf("%dtn",ret);
	return 0;
}

上面代码大于0,说明str1大于str2.

<6>.strncmp

strncmp:strncmp 功能是把 str1 和 str2 进行比较,最多比较前 n 个字节

​
int fun()
{

	char str1[5]="abcd";
	char str2[5]="abc4";
	int ret;
	ret=strncmp(str1,str2,3);
	printf("%dtn",ret);
	return 0;
}

​

上面代码比较前3个字节是相等的

<7>.strlen

strlen:测字符串长度

​
int fun()
{

	char str1[5]="abcd";
	char str2[5]="abc4";
    size_t len;
    len=strlen(str1);
	printf("%dtn",len);
	return 0;
}

​

​

<8>.strset

strset:用于返回指向s的指针,把字符串s中的所有字符都设置成字符c

int fun()
{

	char str1[5]="abcd";
	char str2[5]="abc4";
	int ret;
	size_t len;
	char* value;
	value=strset(str1,'F');
	printf("%stn",value);
	return 0;
}

运行上面的代码就把str1设置成了"FFFF"

<9>.memcpy

memcpy:函数的功能是从源内存地址的起始位置开始拷贝若干个字节到目标内存地址中,即从源source中拷贝n个字节到目标destin中

int fun1()
{
	char number[10]={0};//初始化,清零
	char*str2="edsfds";
	memcpy(number,str2,strlen(str2)+1);
	printf("%stn",number);
	return 0;
}

注意,strlen(str2)+1的目的是要把''复制上.

<10>.memset

memset:作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。

int fun1()
{
	char number[10];
	memset(number,0,10);
	printf("%dtn",*number);
	return 0;
}

上面两个是内存相关的函数,顺便介绍一下.

<11>.strlwr

strlwr:转换为小写

int fun2()
{
	char str[]="ABCDEF";
	char* s;
	s=strlwr(str);
	printf("%sn",s);
	return 0;
}

<12>.strupr

strupr:转换到大写

int fun2()
{
	char str[]="hijkem";
	char* s;
	s=strupr(str);
	printf("%sn",s);
	return 0;
}

二.函数指针

typedef 把类型重新起个名字

函数指针主要用法:
只要知道函数的原型以及函数的地址,那么就可以操纵这个函数

typedef int (*fun_test)(int a,int b);
int fun3(int a,int b)
{
int c;
c=0;
c=a+b;
return c;
}
int main(int argc, char* argv[])
{
int r;
fun_test add;
add=(fun_test)fun3;
r=add(1,2);
printf("%dn",r);
return 0;
}

 上面代码举例,fun3的原型就是int (int a,int b),把函数名字去掉就是它的原型.

定义的时候起个名字,名字前面加颗*,加括号就代表它是函数的指针,fun_test是新定义的函数指针类型.

调用时先定义一个函数指针类型变量 add;获取fun3的地址,获取之前类型不同先强转,然后再调用add.

运行可知和直接调用fun3结果是一模一样的.


今天的文章就到这里了,如果有任何不明白的地方欢迎与我交流,我必定知无不言。这篇文章也花了一定的心血,喜欢的小伙伴可以点赞关注哦。感激不尽!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1012543.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号