c语言面试
文章平均质量分 64
茜茜她老爹
一切随缘!!
展开
-
unsigned类型的数据和普通数据类型间转来转去
最近在做一个项目的过程中,遇到了协议的加密解密和封装,其中经常遇到unsigned类型的数据和普通数据类型间转来转去,所以经过研究,简单封装了几个函数,在这里分享给大家,有不足之处还望大家给予指正。unsigned short unCharToUnShort(unsigned char* pBuf){unsigned short result = 0;result = (short)pBuf[0]*256;result += (short)pBuf[1];return result;...原创 2021-08-10 18:37:46 · 841 阅读 · 0 评论 -
[Linux]从控制台一次读取一个字符,无需等待回车键
[Linux]从控制台一次读取一个字符,无需等待回车键 读取字符嘛,可以使用getchar(),getch()等等函数,但它们都需要等待回车键以结束输入,而不是按下键盘时立即响应,看上去不那么“实时”。如果是在windows平台下的话,可以使用conio.h下的_getch()函数,注意是以下划线开头的,msdn链接在这里。在linux下貌似没有找到类似的函数.转载 2016-03-07 13:58:51 · 774 阅读 · 0 评论 -
c语言各类型转换
C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串。1.int/float to string/array:C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明。● itoa():将整型值转换为字符串。● ltoa():将长整型值转换为字符串。● ultoa():将无符号长转载 2016-03-04 15:44:53 · 716 阅读 · 0 评论 -
strtoul函数的使用(将字符串转换成无符号长整型数)
之前使用strtoul函数时,从来没思考过它的用法,最近在编写驱动设计时,突遇这个函数,发现这函数还是有值得探讨的地方。其函数原型如下:unsigned long strtoul(const char *nptr,char **endptr,int base )参数1:字符串起始地址参数2:返回字符串有效数字的结束地址,这也是为什么要用二级指针的原因。参数3:转换基数。当b转载 2016-03-04 14:30:44 · 3591 阅读 · 0 评论 -
Linux进程同步
Linux进程同步-概述进程间通讯(IPC)方法主要有以下几种: 管道/FIFO/共享内存/消息队列/信号量 1.管道中还有命名管道和非命名管道(即匿名管道)之分,非命名管道(即匿名管道)只能用于父子进程通讯,命名管道可用于非父子进程,命名管道就是FIFO,管道是先进先出的通讯方式 2.消息队列是用于两个进程之间的通讯,首先在一个进程中创建一个消息转载 2015-10-09 08:19:33 · 462 阅读 · 0 评论 -
多线程同步方法
临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(Event)的区别 1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线转载 2015-10-09 08:14:20 · 241 阅读 · 0 评论 -
C语言之正确使用const
一、const用途const是一个C语言的关键字,它限定一个变量不允许被改变。1、const与基本类型const char m; //限定m不可变。 2、const与指针1)、const在*前面 const char *p; //*p是const, p可变 char const * p;// *p是const, p可变 2转载 2015-07-02 09:17:35 · 521 阅读 · 0 评论 -
如何在C语言中巧用正则表达式
如果用户熟悉Linux下的sed、awk、grep或vi,那么对正则表达式这一概念肯定不会陌生。由于它可以极大地简化处理字符串时的复杂度,因此现在已经在许多Linux实用工具中得到了应用。千万不要以为正则表达式只是Perl、Python、Bash等脚本语言的专利,作为C语言程序员,用户同样可以在自己的程序中运用正则表达式。 标准的C和C++都不支持正则表达式,但有一些函数库可以辅助C/C+转载 2015-06-05 16:45:21 · 356 阅读 · 0 评论 -
C语言数组赋值一例
在移植内核时,发现一个驱动使用数组十分巧妙。一般地,操作CPU某一外设寄存,不是直接使用完整的地址,而是通过相对地址来访问。比如,访问定时器,首先参考手册定义好定时器基地址,然后再定义寄存器(如控制寄存器、读数据寄存器等)对于定时器基地址的偏移地址。在使用时,一般都是使用偏移地址的,这样十分方便、快捷。如果有七、八个定时器,只需要定义好一个基地址数组、一个偏移地址数组,通过不同的序号就能访问不转载 2015-06-01 17:16:02 · 2068 阅读 · 0 评论 -
二维数组和字符串与指针的关系
指针与多维数组多维数组地址的表示方法:二维数组s[3][4] 定义 int s[3][4]={ {0,2,4,6},{1,3,5,7},{9,10,11,12} }根据以上的一个二维数组的例子,就有如下表示:注意:S代表着二维数组的首地址,s+1代表第一行的首地址,而s[1]代表着第一行第一列的地址,虽然s+1和s[1]都是代表着同一个地址,但转载 2015-01-19 14:43:01 · 1160 阅读 · 0 评论 -
头文件防止重复定义方法
#pragma once和#ifndef __CONTROLLER_H_#define __CONTROLLER_H_#endif原创 2016-02-26 11:49:06 · 540 阅读 · 0 评论 -
c语言字符串 数字转换函数大全
atof(将字符串转换成浮点型数)atoi(将字符串转换成整型数)atol(将字符串转换成长整型数)strtod(将字符串转换成浮点数)strtol(将字符串转换成长整型数)strtoul(将字符串转换成无符号长整型数)toascii(将整型数转换成合法的ASCII 码字符)toupper(将小写字母转换成大写字母)tolower(将大写字母转换成小写字母)转载 2016-02-25 20:39:36 · 415 阅读 · 0 评论 -
各种数据类型的取值范围
速查表:char -128 ~ +127 (1 Byte)short -32767 ~ + 32768 (2 Bytes)unsigned short 0 ~ 65536 (2 Bytes)int -2147483648 ~ +2147483647 (4 Bytes)unsigned int 0 ~ 4294967295 (4 Bytes)long == intlo转载 2016-02-26 14:34:54 · 472 阅读 · 0 评论 -
结构体中指针赋值问题的分析及C代码示例
版权声明:本文为博主原创文章,对文章内容有任何意见或建议,欢迎与作者单独交流,作者QQ(微信):245924426。 https://blog.csdn.net/zhouzxi/article/details/51892960问题描述 某结构体的定义如下:typedef struct{ int iAge; // 年龄 char szAd...转载 2018-04-20 22:39:30 · 4792 阅读 · 0 评论 -
程序中打印的
#define dbg(fmt, ...) do {printf("[DEBUG %s:%d:%s] " fmt, __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__);} while(0)#define info(fmt, ...) do {printf("[INFO %s:%d:%s] " fmt, __FILE__, __LINE__原创 2017-11-03 17:34:10 · 275 阅读 · 0 评论 -
C语言中常见的内存错误与解决方法
常见的错误 关于内存的一些知识已在内存分配中提及,现记录与分享常见的内存错误与对策。类型 1:内存未分配成功,却使用了它。方 法:在使用之前检查指针是否为NULL。 1)当指针p是函数的参数时,在函数入口处用语句assert(p!=NULL)进行断言检查。 2)当使用malloc或new来申请内存转载 2017-07-26 11:29:23 · 502 阅读 · 0 评论 -
关于字符串结束符'\0'、字符串定义方法
字符串定义方法有2种方法:1)字符数组2)字符指针初始化1)字符数组方式初始化大致3种:(1) char str[10]="12345"或者char str[10]={'1','2','3','4','5'}; 这种方式初始化,系统会自动从未初始化的元素开始,将之后的元素赋为结束标志‘\0’。如上面str数组中的元素实际上是{'1','2','3','4','5','\0','\0','\0','转载 2017-07-19 10:30:52 · 13727 阅读 · 0 评论 -
Sizeof与Strlen
Sizeof与字符串 1.以字符串形式出现的,编译器都会为该字符串自动添加一个0作为结束符 如在代码中写 "abc",那么编译器帮你存储的是"abc/0" 2."abc"是常量吗?答案是有时是,有时不是。 不是常量的情况:"abc"作为字符数组初始值的时候就不是,如 char str[]转载 2014-09-30 14:28:51 · 517 阅读 · 0 评论 -
C 语言中用bsearch()实现查找操作
C语言中可以用bsearch()实现二分查找。同qsort()一样,bsearch()也包含在库中,且同样要自定义比较子函数。其原型如下: void*bsearch(constvoid *key,const void *base,size_t nmem,size_t size,int (*comp)(constvoid *,转载 2016-07-26 15:14:44 · 841 阅读 · 0 评论 -
C语言项目开发-项目架构和编程命名规范
1、尽量不用全局变量 全局很容易破坏软件的结构,增加代码的耦合度,将模糊业务代码、数据库代码、控制代码的界限, 害得维护人员在阅读代码时,第一要务就是要追踪全局变量在哪里,由于设计得不好,基本项目的 所有源代码文件都涉及修改了全局变量,这一追踪下来,不是一天半会能够摸索清楚你要了解的某个 功能,尽管这个功能很小,你还是要看完这整个项目,太浪费时间了,不值得啊转载 2016-05-23 18:22:17 · 1901 阅读 · 0 评论 -
C语言头文件避免重复包含、#pragma once和#ifndef的区别
一般情况下,我们都是把函数声明、类定义、模板定义等写到一个头文件里,需要时将相应的头文件用#include包含到源文件(*.cpp文件)里来。但头文件中又允许包含其它的头文件,这样就难免发生某个头文件被重复地包含。我们可以使用编译预处理命令避免这种情况的发生。 例如,你想确保头文件max.h不会被重复包含,则你可以采取如下的形式: 第一条预处理命令是说,如转载 2016-02-26 15:08:09 · 773 阅读 · 0 评论 -
C语言基础-进制、原反补码、位运算
计算机中的进制#include int main(int argc, const char * argv[]){ int num = 13; //C语言默认是十进制,关于进制都不区分大小写的 //以0b或0B开头是二进制数 int b = 0b1101; printf("%d\n",b);//%d是按十进制输出 //以0开头的是八转载 2015-01-19 14:46:40 · 631 阅读 · 0 评论 -
signed char 和unsigned char 区别
一:signed char 和unsigned char 的取值范围Char和int 一样,都有有符号和无符号之说。即unsigned char和signed char。1.C语言中我们用的char默认到底是有符号还是无符号的呢?对于不同的教材会有不同的答案,其实有无符号都是自己电脑的编译器决定的。(注意:我的电脑默认是有符号的,以下实例都是转载 2015-01-19 14:18:53 · 3666 阅读 · 0 评论 -
字节对齐
字节对齐三原则 1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除; 2) 结构体每个成员相对于结构体首地址的偏移量都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节;例如上面第二个结构体变量的 地址空间。 3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节。转载 2014-06-12 12:37:04 · 484 阅读 · 0 评论 -
大端法、小端法、网络字节序
关于字节序(大端法、小端法)的定义《UNXI网络编程》定义:术语“小端”和“大端”表示多字节值的哪一端(小端或大端)存储在该值的起始地址。小端存在起始地址,即是小端字节序;大端存在起始地址,即是大端字节序。 也可以说: 1.小端法(Little-Endian)就是低位字节排放在内存的低地址端即该值的起始地址,高位字节排放在内存的高地址端。 2.大端法(Big-Endia转载 2014-05-26 18:05:34 · 577 阅读 · 0 评论 -
位域与结构体对齐
一 位域有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几 个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用转载 2014-05-22 11:34:02 · 797 阅读 · 0 评论 -
strlen和sizeof的区别
strlen和sizeof的区别一、sizeof sizeof(...)是运算符,而不是一个函数。 一个简单的例子:int a;cout 在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。 它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。 由于在编译时计算转载 2014-07-20 17:56:54 · 473 阅读 · 0 评论 -
什么是预编译,何时需要预编译
1、总是使用不经常改动的大型代码体。 2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。原创 2014-07-21 09:18:32 · 1713 阅读 · 0 评论 -
变量的存储类型、外部变量、static内部变量讲解
全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使原创 2014-07-21 09:18:38 · 3279 阅读 · 1 评论 -
二进制和十进制互转
二进制换成十进制:例如:求110010的十进制数首先在二进制数的上边由右至左写上0,1,2,3。。。(这叫位权)我们先把二进制写出来1 1 0 0 1 0 //二进制5 4 3 2 1 0 //位权然后从左边开始,用第一个数 乘 2^第一个位权 + 第二个数乘2^第二个位权 +...即 1*2^5 + 1*2^4 + 0*2^3 + 0*2^2原创 2014-07-20 18:21:37 · 529 阅读 · 0 评论 -
远程视频监控系统问题集
1.HTTP 是什么协议层?HTTP 是一个面向事务,无连接的属于应用层的协议。2.什么是H.264?它的优点?答:H.264是一种视频编码格式。技术上优点:H.264算法有很高的编码效率,在相同的重建图像质量下,能够比H.263节约50%左右的码率。传输上优点:H.264能够以比较低的数据速率传送基于联网协议(IP)的视频流,在视频质量,压缩效率和数据包恢复丢失方面,超越了M转载 2014-06-03 10:12:01 · 765 阅读 · 1 评论 -
C语言内存管理基础知识总结
C语言内存管理基础知识总结《一》:内存的分配内存分配一般是有五种方式:静态存储区域分配、堆区、栈区、常量区、代码区;静态存储区域一般对应的是整个程序运行期间都一直存在,内存在编译的时候就已经分配好了,常见的全局变量,静态变量(static)。堆区也就是动态内存分配,一般是通过程序员通过(malloc/new )进行分配使用之后需要程序员自己利用(free/delete)进行转载 2014-06-03 10:06:29 · 674 阅读 · 0 评论 -
strcpy() 与 ‘\0’
strcpy() 拷贝字符串,它直到发现'\0'字符串结束符才结束,所以,有时候使用它会出现错误void main(){ char str[10],str0[10]; for(int i=0;i str[i] = 'd'; strcpy(str0,str); return 0} // 程序结束会出现 run-time check fa转载 2014-06-12 12:38:05 · 1056 阅读 · 0 评论 -
C语言测试:想成为嵌入式程序员应知道的0x10个基本问题
C语言测试:想成为嵌入式程序员应知道的0x10个基本问题 C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为带面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的。从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。转载 2014-07-29 08:42:30 · 510 阅读 · 0 评论 -
什么是补码
什么是补码,补码的运算。我们还是列举一个简单的例子吧!就用-6.我们经过以上的学习已经知道负数的符号位为1,所以: (1)-6的二进制: 1000 0000 0000 0110(称为原码,原码是计算机显示给我的) (2)对原码求反码:1111 1111 1111 1001(称为反码,保持符号位不变,将原码中的0变1,1变0) (3)对原创 2015-01-19 13:48:30 · 819 阅读 · 0 评论 -
int转字符串
#include /*Converts an integer to a string. */ char *my_itoa(int value,char *str,int radix) { int i,j,sign; char ps[256]; memset(ps,0,256); if((radix>36) || (radix sign = 0;转载 2015-01-16 17:53:44 · 663 阅读 · 0 评论 -
unsigned char和signed char型变量的区别,赋值后它在内存中的存储形式
在C中,默认的基础数据类型均为signed,现在我们以char为例,说明(signed) char与unsigned char之间的区别 首先在内存中,char与unsigned char没有什么不同,都是一个字节,唯一的区别是,char的最高位为符号位,因此char能表示-128~127, unsigned char没有符号位,因此能表示0~255,这个好理解,8个bit,最多256种情转载 2015-01-16 16:07:35 · 1319 阅读 · 0 评论 -
位运算
文章采摘自百度百科http://baike.baidu.com/view/379209.htm,有删减,将其pascal代码改为c语言代码。简介:程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算。举个例子,6的二进制是110,11的二进制是1011,那转载 2015-01-16 16:05:44 · 651 阅读 · 0 评论 -
c语言格式符
d,lx,ld,,lu,这几个都是输出32位的hd,hx,hu,这几个都是输出16位数据的,hhd,hhx,hhu,这几个都是输出8位的,lld,ll,llu,llx,这几个都是输出64位的,原创 2014-12-08 14:50:41 · 856 阅读 · 0 评论 -
strcpy与strncpy工作方式及其区别
strcpy与strncpy工作方式及其区别strcpy中的循环语句:while ((*strDest++ = *strSrc++) != '\0') 这个循环会一直执行,直到循环条件为空,即'\0',也就是说,如果strDest所指的存储空间不够大的话,这个函数会将strSrc中的部分内容拷贝到strDest所指内存空间后面的内存中。而strDest所指空间后面的内存转载 2014-09-22 07:40:09 · 684 阅读 · 0 评论