首页 > 编程语言 >c++ .11

c++ .11

时间:2023-04-23 11:47:42浏览次数:40  
标签:11 const c++ char 字符串 内存 缓冲区 输入

复习:     堆内存管理:         C语言没有管理堆内存的语句,只能使用标准库的函数         #include <stdlib.h>         void* malloc(size_t size);         注意:void* 在C++编译器中是不能自动转换成其它类型的指针,如果想让代码也在C++编译器中兼容,需要强制类型转换             int* p = (int*)malloc(4);         注意:C编译器不允许在main函数之前调用函数,但C++允许             void free(void* ptr);         注意:不要重复释放,不要释放非法地址,但可以释放NULL         *常考的笔试面试题:、         1、堆内存与栈内存的区别             是什么?优缺点?使用注意事项?         2、堆内存越界的后果?             没超33页可能脏数据或一切正常,超了33页一定段错误             越界破坏了malloc的维护信息,当再次free时会内存崩溃         3、什么是内存泄漏,如何定位内存泄漏?             由于业务逻辑或者粗心大意导致已经使用完毕的堆内存没有释放,当需要时再次申请,又继续没有释放,长期以往内存就会越来越,系统会慢慢卡死或崩溃,这种叫做内存泄漏             1、查看进程内存的使用情况 Linux ps -aux             2、通过mtrace类似的代码分析工具,检查是否有没有free的内存             3、封装malloc、free,记录调用情况到日志中         4、什么是内存碎片?如何减少产生内存碎片?             已经释放但又无法使用的内存,叫做内存碎片,由于申请和释放的时间、大小不协调导致的                 1、尽量使用栈内存                 2、不要频繁地申请和释放                 3、申请大块内存自己管理 ------------------------ 一、字符串     字符:人能看得懂的符号或图案,在内存中以整数形式存储,根据ASCII码表中的对应关系显示出相应的符号或图案     '\0'    0   空字符     '0'     48     'A'     65     'a'     97
    串:是一种数据结构,存储类型相同的若干个数据         对于串型结构的处理是批量性的,会从头开始直到遇到结束标志停止         字符串:         由字符组成的串型结构,结束标志是 '\0'
二、字符串的存在形式     字符数组:         char str[10] = {'a','b','c',...};         由char组成的数组,注意要为'\0'预留位置,初始化麻烦         使用的是栈内存,数据可以修改         字符串字面值:         "由双引号包含的若干个字符"         末尾会隐藏一个'\0',定义也方便         字符串字面值就是以地址形式存在的,是常量,数据存储在代码段中,不能修改,否则段错误         注意:相同内容的多份字符串字面值,在代码段中只会存在一份         注意:sizeof("xxxx") 计算出 字符个数+1         常用方式:         字符数组[] = "字符串字面值";         会自动为'\0'预留位置         注意:赋值完成后,该字符串在内存中有两份,一份在代码段,另一份在栈内存(可修改)
三、字符串的输入和输出     scanf %s 地址         缺点:不能输入空格         char *gets(char *s);     功能:输入字符串到s中 能够输入空格     返回值:s 链式调用     缺点:有警告,输入的长度不受限制,有风险
    char *fgets(char *s, int size, FILE *stream);     功能:输入长度最多为 size-1 的字符串,会自动为'\0'预留位置         超出部分不接收,不足时最后的'\n'也会一起接收
    输出:     printf %s 地址
    int puts(const char *s);     功能:输出一个字符串,并且会自动在末尾打印一个'\n'     功能:成功输出的字符个数
    练习1:实现一个函数,判断一个字符串是否是回文串         "abccba"
四、输出缓冲区     缓冲区机制可以提高数据的读写速度,还可以让低速的设备与高速的CPU之间系统工作     程序要显示的数据并不会立即显示到屏幕上,而是先存储到输出缓冲区中,当满足一定条件时才会从输出缓冲区显示到屏幕上         1、遇到'\n'         2、遇到输入语句         3、当缓冲区满了4k         4、程序正常结束时         5、fflush(stdout); 手动刷新输出缓冲区
五、输入缓冲区     程序中输入的数据并不会立即从键盘接收到变量中,而是当按下回车后先存储到输入缓冲区中,然后再从缓冲区中读取到变量内存中
    情况1:需要输入的是整型\浮点型时,而缓冲区中的数据是字符型或符号时,此时读取会失败,并且该数据会继续残留在输入缓冲区中,会继续影响剩下的输入         解决:根据scanf的返回值判断输入是否有问题,如果读取失败,则先清理输入缓冲区后重新输入,直到读取成功为止
    情况2:通过fgets可以指定读取size-1个字符,但是如果输入超过size-1那么字符会残留在输入缓冲区中,继续影响接下来的输入         解决方法1:         int len = 0;         while(str1[len]) len++; //len是'\0'的下标         if('\n' != str1[len-1])// '\0'前面不是'\n'则清理         {                 scanf("%*[^\n]");         //从缓冲区中读取任意类型数据并丢弃,直到遇到'\n'停止             scanf("%*c");         //从缓冲区中读取任意字符类型数据并丢弃         }         方法2:         stdin->_IO_read_ptr = stdin->_IO_read_end;         //  把输入缓冲区的位置指针从当前位置,移动到末尾,相当于清理输入缓冲区         注意:只能在Linux系统下使用
    情况3:当先输入整型或浮点型,再输入字符型时,输入完整型或浮点型后按下的回车或空格,会残留在输入缓冲区,刚好被后面的字符型接收,影响输入         解决:在%c或者gets()前面加空格             scanf(" %c");
六、字符串相关函数     #include <string.h>     size_t strlen(const char *s);     功能:计算字符串的长度,不包括'\0'
    char *strcpy(char *dest, const char *src);     功能:把src拷贝给dest,相当于给dest赋值 =     返回值:dest的首地址,链式调用
    char *strcat(char *dest, const char *src);     功能:把src追加到dest的末尾 相当于+=     返回值:dest的首地址,链式调用
    int strcmp(const char *s1, const char *s2);     功能:比较两个字符串,根据字典序,谁出现早谁小,一旦比较出结果就立即返回     返回值:         s1 > s2 正数         s1 == s2 0         s1 < s2 负数                   char *strncpy(char *dest, const char *src, size_t n);     char *strncat(char *dest, const char *src, size_t n);     int strncmp(const char *s1, const char *s2, size_t n);
    int atoi(const char *nptr);     功能:把字符串转换成int类型     double atof(const char *nptr);     功能:把字符串转换成double类型
    char *strstr(const char *haystack,const char *needle);     功能:在haystack中查找是否存在子串needle     返回值:needle在haystack中第一次出现的位置,如果找不到返回NULL         int sprintf(char *str, const char *format, ...);     功能:把各种类型的数据转换成字符串并输入到str中
    int sscanf(const char *str, const char *format, ...);     功能:从字符串中解析出各种类型的数据,并存储到对应的变量中
    void *memcpy(void *dest, const void *src, size_t n);     功能:把src内存的数据拷贝n个字节到dest中
    练习:自己重新实现strlen\strcpy\strcat\strcmp四个函数     size_t str_len(const char *s);     char *str_cpy(char *dest, const char *src);
    作业1:定义一个函数,把一个由数字字符组成的字符串转换成整数     作业2:定义一个函数,把一个字符串逆序     "abcd"     "dcba"

标签:11,const,c++,char,字符串,内存,缓冲区,输入
From: https://www.cnblogs.com/mrlinan/p/17346023.html

相关文章

  • c++.13
    预处理指令:  #define  常见笔试面试题:  1、简述#define与typedef的区别:    如果是普通类型,它们在功能上无任何区别,但本质不同,一个是代码替换,一个是类型重定义    #defineINTPint*      INTPp1,p2,p3; //p1是指针p2p3是int......
  • C与C++的区别(程序上)
    一.头文件上  1.为什么c++语言的头文件上可以使用"stdio.h"?  答:因为c++的标准库已经帮我们包含了c语言的标准库,因此c++也可以实现c语言能实现大多功能。例如"iostream"是c++的输入输出流头文件,"stdio.h"是c语言的输入输出流头文件,当在c++语言中调用"stdio.h"后便可以在c++......
  • C++.14
    结构:  结构是由程序员自己设计的一种数据类型,用于描述一种事物的各项数据,由若干个不同的基础类型组成  设计:  struct结构体类型名  {    类型名成员名;    ...  };  定义:    struct结构体类型名结构体变量名; ......
  • 111
    tsts   ......
  • c++第十天
    指针复习:  什么是指针:    数据类型定义指针变量整型内存编号访问对应内存  为什么使用指针:    1、函数之间共享变量      输入、输出    2、提高传参效率      指针变量4\8字节    3、使用堆内存时......
  • C++ - 多线程之初识多线程
    1.认识多线程传统的C++(C++11之前)中并没有引入线程这个概念,在C++11出来之前,如果我们想要在C++中实现多线程,需要借助操作系统平台提供的API,比如Linux的<pthread.h>,或者windows下的<windows.h>。C++11提供了语言层面上的多线程,包含在头文件<thread>中。它解决了跨平台的问题,提供......
  • Effective Modern C++ 学习笔记
    闲话今天是2023年4月23日,俺开始正式学习面试相关内容了。打算先从EffectiveModernC++这本书开始学起,作为日后代码风格、习惯的指导。不过俺没有一起学习的小伙伴,qwq。与ICPC切割之后,内心都轻松了许多。小醉一宿之后还是十分愉悦的。欢迎加入C++学习群:https://j......
  • 学习-11
    1.回顾1.切换目录cd2.查看目录下的内容:ls[-al]3.当前所在的目录pwd4.创建目录mkdir[-p]5.创建文件touch6.删除目录文件rm[-rf]7.复制文件或目录cp[-r]8.移动或重命名mv9.编辑文件内容:vi---命令行模式---i---编辑---esc[:wq保存并退出:q!......
  • leetcode_打卡11
    leetcode_打卡11题目:392.判断子序列代码:classSolution{publicbooleanisSubsequence(Strings,Stringt){intn=s.length(),m=t.length();inti=0,j=0;while(i<n&&j<m){if(s.charAt(i)==t.c......
  • 基于C++控制台的吃豆人小游戏
    访问【WRITE-BUG数字空间】_[内附完整源码和文档]玩家目标是吃掉所有豆豆,途中,若玩家撞到怪兽则游戏结束。游戏中存在超级豆子,吃到后,所有怪兽静止,且玩家进入无敌状态(可撞怪兽使之回到初始位置)。玩家可使用键盘方向键进行选择、控制移动,回车键确定,Esc键返回,空格键暂停。控制台小游戏......