C语言:字符串和内存函数 您所在的位置:网站首页 c语言中的字符串长度函数 C语言:字符串和内存函数

C语言:字符串和内存函数

2023-07-10 08:27| 来源: 网络整理| 查看: 265

目录

字符串和内存函数

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 实验室设备网 版权所有