C语言基础(不断更新)
1.memcpy、 memmove、memccpy的区别
memcpy要求源串和目的串不能重叠
memccpy:copy直至遇到由参数指定的ch.
memmove: 源串和目的串可以重叠。
2.strcpy写法
【转载】面试常考题型之strcpy写法
- 注意检查指针有效性,注:’\0’与NULL一样,是acii码为0的字符,都怪自己以前看别人的代码不求甚解,还妄加评论,到现在才弄清楚这一点,检查字符串的有效性不是用strlen(str)==0来进行的。
- 注意抛出异常,如果指针无效,抛出异常,throw “invalid pointer”;注意这种throw的方式是c++风格,在c中实现异常处理还需颇费周折
- 注意封口,也就是注意dest的最后一个字符串为’\0’
- 注意返回值,以实现链式效果
3.strlen的一些考虑
strlen(NULL)和strlen(“”)有何区别?
作为一个习惯了写c++代码的人,一直很依赖语言提供相应的边界检查,认为理所当然strlen里面会有对字符串为null这种特殊情形的检查,但是发现,其实c语言好多函数都需要注意调用条件,这是一个典型的例子,strlen(NULL);在编译的时候没问题,但是执行期就出错了。而strlen(“”);返回值为0,这是理所当然的。
4.关于sizeof的碎碎念
sizeof使用有两种形式:
- sizeof(变量类型):必须加括号
- sizeof(变量)or sizeof 变量,如sizeof int
几种特殊的考虑:
- sizeof(函数名):gcc返回1,听说vc不支持
- sizeof(void):gcc返回1,听说vc不支持
- sizeof(结构类型):需考虑对齐
- sizeof(string)的值一定是固定的,在普通机器上为4,这就是我在下一条中总结的。关于sizeof(string),今天看那本面试宝典的时候看到这个表达式,有点吃惊,书上写着sizeof(string)=4;当时很纳闷,难道分配4个字节大小的内存给string吗?查阅了相关资料得出结论:string的实现在各库中可能有所不同,但是在同一库中相同一点是,无论你的string里放多长的字符串,它的sizeof()都是固定的,字符串所占的空间是从堆中动态分配的,与sizeof()无关。
- sizeof(数组名):值为所有数组元素大小的和,见我另一篇数组名总结
注意:
- sizeof 不是函数,可能是个宏
- sizeof获取的是在栈上需要的空间,堆上申请的空间跟sizeof无关。
- sizeof是在编译器处理的,所以被sizeof的表达式是不会计算的,如下面输出是4,0,而不是4,3
nt a = 0;cout<<sizeof(a=3)<<endl;cout<<a<<endl;- sizeof最强总结
4.string 类型的大小
好吧,这其实是一个c++问题,但是姑且先放入这个专题,请问下面这个程序结果为多少?
#include <string>#include <iostream>typedef struct AA{std::string a;int *pb;}A;using namespace std;int main(){cout<<sizeof(A);return 0;}
C语言基础(不断更新)的更多相关文章
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 一.SQL Server体系结构 1.1 数据库 ...
- Object Pascal 语言基础
Delphi 是以Object Pascal 语言为基础的可视化开发工具,所以要学好Delphi,首先要掌握的就是Object Pascal 语言.Object Pascal语言是Pascal之父在1 ...
- 2008技术内幕:T-SQL语言基础
2008技术内幕:T-SQL语言基础 单表查询摘记 这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基础>,书中用到的案例数据库是这个 TSQLF ...
- MySQL学习笔记_8_SQL语言基础复习
SQL语言基础复习 一.概述 SQL语句注释方式 1)以"#"开头直到行尾的所有内容都是注释 2)以"--"(--后还有一个空格)开头直到行尾的所有内容都是注释 ...
- 20165237 学习基础和C语言基础调查
学习基础和C语言基础调查 一.技能学习与特长 你有什么技能比大多人(超过90%以上)更好? 我的爱好和技能说实话挺广泛的.如果要挑出来一个很擅长的话,我觉得应该是钢琴. 针对这个技能的获取你有什么成功 ...
- D01-R语言基础学习
R语言基础学习——D01 20190410内容纲要: 1.R的下载与安装 2.R包的安装与使用方法 (1)查看已安装的包 (2)查看是否安装过包 (3)安装包 (4)更新包 3.结果的重用 4.R处理 ...
- D14——C语言基础学PYTHON
C语言基础学习PYTHON——基础学习D14 20180919内容纲要: 1.html认识 2.常用标签 3.京东html 4.小结 5.练习(简易淘宝html) 1.html初识(HyperText ...
- 【Java初探实例篇01】——Java语言基础
示例系列,将对每节知识辅以实际代码示例,通过代码实际编写,来深入学习和巩固学习的知识点. IDE:intellij IDEA: 语言:Java 本次示例:Java语言基础知识的应用. 创建包day_4 ...
- 【Java初探02】——Java语言基础
本篇博文就Java语言的一些基本元素进行一些记录和阐述,主要讲解一下Java语言的一些基本构成元素和Java的主类结构. Java语言基础的大致组成 java主类结构 基本的数据类型 变量与常量 运算 ...
随机推荐
- NDK(4)"Unresolved inclusion jni.h”的解决方法
参考 : http://blog.csdn.net/zhubin215130/article/details/39347873 3种解决办法: 一,重新初始化eclipse对该project的nat ...
- [HDOJ1078]FatMouse and Cheese(记忆化搜索)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1078 题意:给出n, k,然后给出n*n的地图,(下标0~n-1),有一只老鼠从(0,0)处出发,只能 ...
- 51nod1055 最长等差数列
完全一脸懵逼!.dp[i][j]表示i,j为相邻的两项的最大值.两个指针两边扫的思想好劲啊这个!%%% #include<cstdio> #include<cstring> # ...
- ucosII移植
移植ucos II 到一个芯片上,只需要修改下面三个文件:OS_CPU.H,OS_CPU_C.C,OS_CPU_A.ASM. 具体来说,移植主要包括以下几项内容 (1).OS_CPU.H :用#def ...
- VS启用IIS调试的方法及可能碰到的问题。
经常有这种情况, 开发机本地正常, 但是一旦发布到服务上后, 就出现各种问题. 这是由于开发机和服务器环境不一样造成的, 所以开发时要尽可能的模拟真实性. 这时候, VS的这个功能就帮大忙了. 如何 ...
- XmlElement可以避免由XmlSerializer多余生成的代码
public class Program { static void Main(string[] args) { var alarm = new Alarm() { Code = "1588 ...
- activiti 源码笔记之startProcess
rumtimeService.startProcessInstanceByXX方法将启动流程的任务委派给StartProcessInstanceCmd,此时会根据rumtimeService.star ...
- 【Android】跟着教程做の学习笔记
教程 + <第一行代码 - Android> //尽量在十二月底学完吧(同步学习java基础)
- ubuntu下安装Matlab
(注:本文部分内容转自互联网) 一. 安装程序Step 1:下载matlab的安装文件至主目录下,讲matlab文件重命名为Mathworks.Matlab.R2012a.Unix.isoStep 2 ...
- Android高手进阶教程(五)之----Android 中LayoutInflater的使用!
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://weizhulin.blog.51cto.com/1556324/311450 大 ...