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主类结构 基本的数据类型 变量与常量 运算 ...
随机推荐
- Google 镜像站大集合
没有了google的日子是相当难受,下面推荐一些google的镜像站,感谢原文博主的无私奉献,同时也欢迎大家总结科研上的小技巧,心得等来本平台投稿,好东西当然要拿出来共同分享! 以下镜像站分原版和非原 ...
- 如何给桌面搬家(Win XP)
是不是习惯把一些常用的文件放在桌面上?或者接收个文件就直接放桌面了,这样用起来方便点. 可是一旦你重装系统或者恢复系统,桌面又回到了以前的状态,很多的文件就丢了.小心的话,重做系统前会做个备份.但如果 ...
- 《OD大数据实战》mac下安装nginx+php
一.mac安装nginx + php + php-fpm 或apache + php 1. Mac 下 Nginx.MySQL.PHP-FPM 的安装配置 2. Mac下安装LNMP(Nginx+P ...
- 第五讲:深入hibernate的三种状态
学过hibernate的人都可能都知道hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),大家伙也许也知道这三者之间的区别 ...
- 微信公共服务平台开发(.Net 的实现)5-------解决access_token过期的问题(转)
因为access_token,在以后的高级功能里面会经常用到,所以这里不得不这里对前面所讲解的access_token改造一下.另外需要说明的是access_token是变化的,有自己的周期,官方解释 ...
- OpenStack(0) - Table of Contents
1. Keystone OpenStack Identity Service2. Starting OpenStack Image Service3. Starting OpenStack Compu ...
- 13.Object-C--浅谈Foundation框架常用的结构体
------- android培训.iOS培训.期待与您交流! ---------- 昨天学习了Foundation框架中常用的结构体,下面我简单的总结一下,如果错误麻烦请留言指正,谢谢! Found ...
- RPi 2B Android telnet ssh
/*********************************************************************** * RPi 2B Android telnet ssh ...
- [转]就这样,创建了自己的运行时共享库(RSL)
原文地址:http://riaoo.com/?p=1405 博客园的下载地址(版权归原作者) http://files.cnblogs.com/tianlanliao/CustomRSL.zip 创建 ...
- Heritrix源码分析(七) Heritrix总体介绍(转)
本博客属原创文章,欢迎转载!转载请务必注明出处:http://guoyunsky.iteye.com/blog/642794 本博客已迁移到本人独立博客: http://www.yun ...