# strtol函数
long int strtol(const char *str, char **endptr, int base);
str:要转换的字符串
endptr:指向一个指针的指针,用于存储第一个无效字符的地址
base:进制,可以是2到36之间的任意值,或者0(表示根据情况自动判断进制)
函数会从str开始的位置解析一个长整型数值,直到遇到非数字或者非进制字符为止,并将其转换为长整型数值。如果endptr不是NULL,则会将解析过程中第一个无效字符的地址存储到endptr指向的地址中。strtol函数支持正负号、前缀0x或0X表示十六进制数、前缀0表示八进制数等。
# strcpy函数
strcpy函数是C语言中的一个字符串处理函数,用于将一个字符串复制到另一个字符串中。其原型为:
char* strcpy(char* destination, const char* source);
其中destination是目标字符串的指针,source是源字符串的指针。strcpy函数会将源字符串复制到目标字符串中,直到遇到源字符串的\0结束符为止。需要注意的是,strcpy函数不会检查目标字符串的长度,因此在使用时要确保目标字符串足够大,以避免发生缓冲区溢出的情况。
3. 运行测试
###############################
Do you know return to library ?
###############################
What do you want to see in memory?
Give me an address (in dec) :1
Segmentation fault (core dumped)
根据提示,需要输入一个十进制的数,如果输入的不是一个合法的内存地址,就会出现段错误
printf("The content of the address : %p\n", *a1);
因为*a1表示取出指针a1所指向的地址的内容,然后使用%p格式化符打印这个内容的地址。但是在这里,*a1是一个指针,如果不是一个合法的地址,所以会导致段错误。如果要打印指针a1所指向的地址,应该直接使用a1而不是*a1。
在python命令行下
$python3
Python 3.10.12 (main, Nov 202023, 15:14:05)[GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license"formore information.
>>> 0x0804857D
134514045
###############################
Do you know return to library ?
###############################
What do you want to see in memory?
Give me an address (in dec) :134514045
The content of the address : 0x83e58955
Leave some message for me :1
Your message is :1
����Thanks you ~