1.字符串的末尾‘\0‘也算一个字符,一个字节。
2.使用库函数strcpy(a,b)进行拷贝b->a操作,strcpy会从源地址一直往后拷贝,直到遇到‘\0‘为止。所以拷贝的长度是不定的。如果一直没有遇到‘\0‘导致越界访问非法内存,程序就崩了。
3.strlen的结果未统计’\0’所占用的1个字节。
4.写出完整的strcpy函数
char * strcpy( char *strDest, const char *strSrc ) { assert( (strDest != NULL) && (strSrc != NULL) ); char *address = strDest; while( (*strDest++ = * strSrc++) != ‘\0’ ); return address; }
5.malloc和free要对应使用,防止内存泄漏
6.printf(str) 改为 printf("%s",str),否则可使用格式化 字符串攻击。printf会把str当成一个格式化字符串(formatstring),printf在其中寻找特殊的格式字符比如"%d"。如果碰到格式字符,一个变量的参数值就从堆栈中取出。很明显,攻击者至少可以通过打印出堆栈中的这些值来偷看程序的内存。
7.malloc之后应该对内存分配是否成功进行判断。free(p)之后应该把p=NULL,否则p会变成野指针。
8.浮点型变量并不精确,所以不可将float变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。
9.数组名的本质如下:
(1)数组名指代一种数据结构,这种数据结构就是数组;
char str[10]; cout << sizeof(str) << endl;
输出结果为10,str指代数据结构char[10]。
(2)数组名可以转换为指向其指代实体的指针,而且是一个指针常量,不能作自增、自减等操作,不能被修改;
char str[10];
str++; //编译出错,提示str不是左值
C++是面向对象的语言,而C是面向过程的结构化编程语言
语法上:
C++具有重载、继承和多态三种特性
C++相比C,增加多许多类型安全的功能,比如强制类型转换、
C++支持范式编程,比如模板类、函数模板等
C/C++ 中指针和引用的区别?
2.使用sizeof看一个指针的大小是4,而引用则是被引用对象的大小;
3.指针可以被初始化为NULL,而引用必须被初始化且必须是一个已有对象 的引用;
4.作为参数传递时,指针需要被解引用才可以对对象进行操作,而直接对引 用的修改都会改变引用所指向的对象;
5.可以有const指针,但是没有const引用;
6.指针在使用中可以指向其它对象,但是引用只能是一个对象的引用,不能 被改变;
7.指针可以有多级指针(**p),而引用至于一级;
8.指针和引用使用++运算符的意义不一样;
9.如果返回动态内存分配的对象或者内存,必须使用指针,引用可能引起内存泄露。
原文:https://www.cnblogs.com/DSKer/p/10908970.html