逆向学习第16天_字符串处理函数编写
本帖最后由 Guido 于 2020-11-10 21:49 编辑1.编写系统函数strcpy
//编写字符串拷贝函数:void StrCopy(char* pDest,char *pSrc)
//在main函数中调用以上函数,从来源字符串向目标字符串复制所有的字符包括结尾符。
//例如:
//int main()
//char s1,s2 = "吕鑫老师:”;
//strcpy(s1,"@$#%abc123xyz");//从栈内数组
//puts(s1);
//StrCopy(s1,s2);//从常量区
//puts(s1);
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
void StrCopy(char *pDest, char *pSrc)//利用的是下标法
{
int i = 0;
do
{
pDest = pSrc;
} while (pSrc);
}
int main()
{
char s1, s2 = "吕鑫老师:";
strcpy(s1, "@$#%abc123xyz"); //调用的是系统函数,且这一字符串存储在栈内,因此是由栈传递向s1的
puts(s1);
StrCopy(s1, s2);//调用自己写的函数
puts(s1);
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
void StrCopy(char *pDest, char *pSrc)//利用的是指针法
{
do
{
*pDest = *pSrc; //如果不加*例如是 pDest=pSrc 就是将整个字符串赋值过去,只有加了*之后,才是一个一个送过去
pDest++;
} while (*(pSrc++)); //这里的pSrc++就是让下次取字符的时候,去取后面的字符
}
int main()
{
char s1, s2 = "吕鑫老师";
strcpy(s1, "@$#%abc123xyz"); //调用的是系统函数,且这一字符串存储在栈内,因此是由栈传递向s1的
puts(s1);
StrCopy(s1, s2);//调用自己写的函数
puts(s1);
return 0;
}
2.编写系统函数strcat
//编写字符串追加(或者叫字符串连接)函数:
//void StrCat(char *pDest,char *pSrc)
//在main函数中调用以上函数,从来源字符串向目标字符串复制所有的字符包括结尾符。
//int main()
//{
//char s1,s2 = "吕鑫老师:‘
//StrCopy(s1,s2);//从栈内数组
//puts(s1);
//StrCat(s1,"@$#%abc123xyz");//从常量区
//puts(s1);
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
void StrCat(char *pDest,char *pSrc)//利用的是下标法
{
int i = 0;
int j = 0;
while (pDest)
{
i++;
}
do
{
pDest = pSrc;
} while (pSrc);
}
int main()
{
char s1=" 吕鑫老师:",s2 = "NBNBafasf";
StrCat(s1, s2); //自己编写的函数
puts(s1);
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
void StrCat(char *pDest, char *pSrc)//利用的是指针法
{
while (*pDest)
{
pDest++;
}
do
{
*pDest = *pSrc;
pDest++;
} while (*(pSrc++));
}
int main()
{
char s1 = " 吕鑫老师:", s2 = "NB~!";
StrCat(s1, s2); //自己编写的函数
puts(s1);
return 0;
}
2.编写系统函数strcmp
//编写strcmp,这个函数是根据ascall码的大小一次进行比较的
//strcmp(s1,s2)
//s1>s2返回正值 s1=s2返回0 s1<s2返回赋值
#include<stdio.h>
int StrCmp(char *arg1, char *arg2)//用下标法
{
int i = 0;
while (arg1 == arg2 && arg1!='\0' && arg2!='\0')
{
i++;
}
if (arg1 > arg2)
return 1;
else if(arg1 == arg2)
return 0;
else return -1;
}
int main()
{
char s1 = "abcdef";
char s2 = "abcde";
int n;
n = StrCmp(s1, s2);
return 0;
}
//编写strcmp,这个函数是根据ascall码的大小一次进行比较的
//strcmp(s1,s2)
//s1>s2返回正值 s1=s2返回0 s1<s2返回赋值
#include<stdio.h>
int StrCmp(char *arg1, char *arg2)//用指针法
{
while (*arg1 == *arg2&& *arg1!= '\0' && *arg2!= '\0')
{
arg1++;
arg2++;
}
if (*arg1>*arg2)
return 1;
else if (*arg1== *arg2)
return 0;
else return -1;
}
int main()
{
char s1 = "abcd";
char s2 = "abcd";
int n;
n = StrCmp(s1, s2);
return 0;
}
好好看看汇编代码,这节课的汇编很重要,以后会经常遇到真假码比较,你要能反推出C代码 roger 发表于 2020-11-17 10:11
好好看看汇编代码,这节课的汇编很重要,以后会经常遇到真假码比较,你要能反推出C代码 ...
可以可以,之前都没看过反汇编代码,提醒了我,好好看看去。 请问这是吕鑫老师的课吗? 名字叫啥?
页:
[1]