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主类结构 基本的数据类型 变量与常量 运算 ...
随机推荐
- Java用于取得当前日期相对应的月初,月末,季初,季末,年初,年末时间
package com.zrar.date; import java.util.Calendar; /** * * 描述:此类用于取得当前日期相对应的月初,月末,季初,季末,年初,年末,返回值均为St ...
- windows 创建SSH Key
1. 安装git,从程序目录打开 "Git Bash" (百度或用这个连接http://pan.baidu.com/s/1dDJCx9n 下载) 2. 键入命令:ssh-keyge ...
- hibernate学习笔记6--Criteria查询方式、完整小练习(开发步骤)
一.Criteria查询方式没有sql语了,因此更加面向对象一些.Criteria是一种比HQL更面向对象的查询方式:Criteria的创建方式: Criteria c = s.createCrite ...
- 解决eclipse-helios中Errors running builder JavaScript Validator的问题
原文:http://blog.ywxyn.com/index.php/archives/713 解决eclipse-helios中Errors running builder JavaScript V ...
- git cheatsheet小抄本
https://www.kernel.org/pub/software/scm/git/docs/git.html
- HDU 3433 (DP + 二分) A Task Process
题意: 有n个员工,每个员工完成一件A任务和一件B任务的时间给出,问要完成x件A任务y件B任务所需的最短时间是多少 思路: DP + 二分我也是第一次见到,这个我只能说太难想了,根本想不到. dp[i ...
- 在 VC6 中使用 GdiPlus-使用
下面用 VC6 来写一个 GdiPlus 的 Demo 工程 Step1:新建一个名为 Demo_GdiPlus 的 MFC AppWizard(exe) 工程 操作步骤:(1)主菜单File-> ...
- HDU 5328 Problem Killer(水题)
题意: 给一个序列,要找一个等差或等比的连续子序列,求其最长的长度. 思路: 扫两遍,判断等差或等比即可.从左往右扫,维护一个滑动窗口,考虑新加进来的数,如果满足了要求,则更新长度,否则只留最后两个数 ...
- Activity传递对象的方法
//Serializeable传递对象的方法 public void SerializeMethod(){ Person mPerson = new Person(); mPerson.setName ...
- dubbo-admin在jdk 1.8上部署出错问题
今天在linux上部署dubbo-admin-2.5.4,一直报错: ERROR context.ContextLoader - Context initialization failedorg.sp ...