C语言:字符串和内存函数 | 您所在的位置:网站首页 › c语言中的字符串长度函数 › C语言:字符串和内存函数 |
目录 字符串和内存函数 1.字符串常量和字符串数组 -字符串常量和字符数组在内存中怎么存储的? 2.字符串结束的标志 -字符串结束的标志是什么? -字符串的结束标志有什么用?举个例子 3.strlen的使用和模拟实现 -strlen的功能是什么? -模拟实现strlen 4.strcpy的使用和模拟实现 -strcpy的功能是什么? -模拟实现strcpy -strncpy的功能是什么? 5.strcat的使用和模拟实现 -strcat的功能是什么? -模拟实现strcat -strncat的功能是什么? 6.strcmp的使用和模拟实现 -strcmp的功能是什么? -strcmp是如何比较两个字符串的内容的? -模拟实现strcmp 7.strstr的使用和模拟实现 -strstr的功能是什么? -模拟实现strstr 8.memcpy的使用和模拟实现 -memcpy的功能是什么? -memcpy的模拟实现 9.memmove的使用和模拟实现 -memmove的功能是什么? -memmove的模拟实现 10.memset -memset的功能是什么?如何使用? 11.memcpy -memcpy的功能是什么?如何使用? 12字符串相关的函数(islower/tolower等)(了解) -字符串分类函数都有哪些? -字符串转换函数都有哪些? 13.其它函数的模拟实现 -atoi模拟实现 板块: 字符串常量和字符串数组字符串结束的标志strlen的使用和模拟实现strcpy的使用和模拟实现strcat的使用和模拟实现strcmp的使用和模拟实现strstr的使用和模拟实现memcpy的使用和模拟实现memmove的使用和模拟实现memset memcpy 字符串相关的函数(islower/tolower等)(了解)其它函数的模拟实现提问: 字符串常量和字符数组在内存中怎么存储的?字符串结束的标志是什么?字符串的结束标志有什么用?举个例子strlen的功能是什么?模拟实现strlenstrcpy的功能是什么?模拟实现strcpystrncpy的功能是什么?strcat的功能是什么? -模拟实现strcatstrncat的功能是什么?strcmp的功能是什么?strcmp是如何比较两个字符串的内容的? -模拟实现strcmpstrstr的功能是什么? -模拟实现strstrmemcpy的功能是什么?memcpy的模拟实现memmove的功能是什么?memmove的模拟实现memset的功能是什么?如何使用?memcpy的功能是什么?如何使用?字符串分类函数都有哪些?字符串转换函数都有哪些?atoi模拟实现 字符串和内存函数 1.字符串常量和字符串数组 -字符串常量和字符数组在内存中怎么存储的?字符串常量和字符数组在内存中有所区别: 字符串常量:在内存中,通常被存储在只读数据段中。字符串数组:在内存中,被存储在栈或堆上(取决于其是作为局部变量还是有动态分配内存创建的): 局部字符数组:它将被存储在调用栈的栈帧中。当函数执行完毕或离开作用域时,该字符数组将被自动释放动态字符数组:它将被存储在堆中。这种情况下,需要手动释放内存,以防止内存泄漏。补充说明: 1.字符串常量:由双引号括起的字符序列,它在内存中的存储方式意味其是不可修改的,任何修改字符串常量的操作都会导致不可预期的行为。 2.字符数组:字符数组是一种用于存储字符序列的数据结构,它有一组连续的字符序列组成。它可以存储可变的字符串。 2.字符串结束的标志 -字符串结束的标志是什么?‘\0’ -字符串的结束标志有什么用?举个例子 字符串的结束标志:‘ \0 ‘作用:’用来告诉程序对字符串的处理操作何时停止示例:使用strlen求字符串长度 现有字符串”abcd“,使用strlen("abcd"),当遇到\0时,不在继续处理字符串,返回结果。 3.strlen的使用和模拟实现 -strlen的功能是什么? strlen:用于求字符串的长度类型如下:size_t strlen(const char* str);示例:char str1[] = "abcdef"; strlen(str1); 其结果为6 -模拟实现strlen size_t my_strlen(const char* str) { assert(str); int count = 0; while (*str++) { count++; } return count; }这段代码创建了一个函数: 返回类型:size_t(返回的数始终>0) 函数名:my_strlen 形参:const char* str (用一个字符类型指针接收,const防止原字符串被修改) 函数体:声明一个count作为计数器,使用while循环一直向后遍历字符串直到遇到‘\0’,循环停止,停止计算,返回count值。 assert(str);断言其是否为空。 (*str不为'\0'循环就会一直进行下去,结束条件:让str++使其能向后找到\0) 4.strcpy的使用和模拟实现 -strcpy的功能是什么? strcpy:用于将原字符串复制到目标字符串当中。类型:char* stcpy(char* dest,const char* src);示例: char str1[] = ”abcd“;char str2[10]; strcpy(str1,str2); 后 char str2 = "abcd"; -模拟实现strcpy char* my_strcpy(char* dest,const char* src) { assert(dest); assert(src); while (*dest++=*src++) ; } 这里不再赘述它的声明,后面主要说明其如何实现: 首先:代码进行断言检测,若传递过来的为空指针就直接报错。(assert(dest);) 这段代码:使用了一个循环来逐个拷贝源字符串的字符到目标字符串中,直到遇到源字符串的结束标志'\0',然后递增dest和src的指针,移动到下一个字符的位置 dest指向目标字符串的指针,src指向源字符串的指针 *dest++=*src++:逐个拷贝源字符串的字符到目标字符串中 while循环判断的终止条件为: *dest++=*src++ ,若src为\0,判断条件为0,循环终止。 这里将赋值操作的结果作为while循环终止的判断条件,while循环内为空语句,减少了代码的书写。 -strncpy的功能是什么? strncpy:将源字符串的n个字符拷贝到目标字符串中,strncpy限制了拷贝字符的长度类型: char* strncpy(char* dest,char* src, size_t count);count:是要拷贝字符的个数 5.strcat的使用和模拟实现 -strcat的功能是什么? strcat:将源字符串连接到目标字符串的后面类型如下:char* strcat(char* dest,const char* src);示例:char dest[20] = "abc";char src[20] = "def"; strcat(dest,src); 后char dest [20]= "abcdef"; -模拟实现strcat char* my_strcat(char* dest,const char* src) { assert(dest); assert(src); char* sta = dest; while (*sta++);//找到目标字符串\0的位置 //从目标字符串\0的位置开始逐个拷贝src的字符 while (*src) //当到源字符串的\0时,停止拷贝 { *sta++ = *src++; } *sta = '\0';//添加终止符 return dest; }这段代码:首先使用while循环找到目标字符串\0的位置,然后从目标字符串\0的位置开始拷贝src的字符串,最后添加上\0。 -strncat的功能是什么? strncat:将源字符串的n个字符连接到目标字符串中类型如下:char* strncat(char* dest,const cahr* src,size_t n);n:要连接的字符个数 6.strcmp的使用和模拟实现 -strcmp的功能是什么? strcmp:比较字符串的大小返回值:>0 目标字符串大于源字符串 0 目标字符串等于源字符串
|
CopyRight 2018-2019 实验室设备网 版权所有 |