范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

C语言对字符字符串字符常量和字符串常量的约定

  程序是对数据的表示和处理。对于数值型数据,可以直接处理;对于数值型以外的数据,例如文本(字符和字符串),图形图像,音频视频,还涉及到数据的表示(数据编码)的问题。1 C语言对字符和字符常量的约定
  字符编码有ASCII、GB2312,Unicode等。处理字符或字符串数据时,其实质是对字符编码的操作。ASCII编码使用一个字节的整数来编码西文字符,而整数在计算机中是区分signed和unsigned的,对于unsigned的,一个字符的表示范围是0-255(0x00000000-0xFFFFFFFF),对于signed,通常使用补码来编码,也就是区分符号,一个字节的值域(表示的整数范围)是:-128~127,虽然ASCII只使用了0x00000000~0x0FFFFFFF的区段(0-127),但字符类型为了与数值型整数在处理时达到统一,char类型也可以区分unsigned和signed,char默认是signed的。
  ASCII对数字字符进行连续编码,字符转数字只需减去"0"即可:    char ch = "3";     int d = ch-"0";     // 字符转数字
  ASCII对大写字母和小写字母也进行了连续编码,为方便处理(包括大小写转换),但其编码值做了特殊考虑:
  Bin
  Oct
  Dec
  Hex
  缩写/字符
  解释
  (二进制)
  (八进制)
  (十进制)
  (十六进制)
  0100 0001
  101
  65
  0x41   A   大写字母A   0110 0001   141
  97
  0x61   a   小写字母a   大、小写字母只有在第6位(从低位到高位)存在区别,这样在大小写转换时特别方便。char str[] = "AbCdEf"; char *p = str; while(*p!="") (*p++) |= "a"-"A"; // 如果是大写,改成小写,将log2("a"-"A")=log2(32),将低位到高位的第6位置1; printf("%s ",str); // abcdef p = str; while(*p!="") (*p++) &= ~("a"-"A"); // 如果是小写,改成大写,将log2("a"-"A")=log2(32),将低位到高位的第6位置0; printf("%s ",str); // ABCDEF   转义字符也可以用ASCII码来表示字符,但只能用8进制或16进制,8进制0开头例如"23"且最多3位、16进制x开头例如"xa"且最多两位; printf("%c %c %c ","60",48,"0");// 0 0 0,用8进制表示转义字符时,前导0可以省略 printf("%c %c %c ","101",65,"A");// A A A,用8进制表示转义字符时,如果超过3位,不要用前导0 printf("%c %c %c ","101",65,"A");// 1 A A // "101"在内存中变成了831h,四个位存储"10",也就是8h,四个位存储"1",也就是31h, // 其整数就是831h,截断成一个字节后就是31h,也就是字符"1"   在C中,unicode编码的字符一般以wchar_t类型存储,固定使用两个字符的长度。   typedef unsigned short wchar_t;#include #include #include int main(void) { char s[]="中";//汉字在C/C++中是用2个字节表示 printf("%d %d ",s[0],s[1]); char m[3]; m[0]=-42; m[1]=-48; m[2]=0; puts(m);//两个字节连起来凑成一个汉字。 printf("%c%c ",s[0],s[1]); printf("%c%c ",214,208);//d6,d0 //都是字符256模数的关系(补码+其负数补码 模) setlocale(LC_ALL, "chs"); wchar_t wc = L"N2D"; wprintf(L"%c ",wc); system("pause"); return 0; } /* -42 -48 中 中 中 中 */   中英文混合的字符统计:#include #include int gbk_strlen(char* str) { char* p = str; //p用于后面遍历 while(*p) //若是结束符0,则结束循环 { if(*p < 0 && (*(p+1)<0 || *(p+1) < 63)) //中文汉字情况 { str++; //str移动一位,p移动移动2位,因此长度加1 p += 2; } else p++; //str不动,p移动一位,长度加1 } return p-str; //返回地址之差 } int main() { char str[] = "abc你好123中国456"; printf("%d ",strlen(str)-gbk_strlen(str)); // 4 getchar(); }2 C语言对字符串的约定   C语言中,字符串是借助于字符型的一维数组来存放的,并规定以字符""作为字符串结束标志。由前面的知识我们知道,‘"是一个转义字符,称为"空值",它的ASCII编码值为0。‘"作为标志占用存储空间,但不计入串的实际长度。   在字符串输出或逐个字符处理时,或者需要其长度信息,或者有一个结束标志,如果选择一个结束标志,在字符串处理时会更加方便。循环时可用字符结束标志作为循环结束标志,在用作函数参数时,不需要额外提供一个长度参数。   例如字符串处理的库函数都是以""结束标志为循环终止条件的,包括strlen(),如果用strlen()去处理字符数组,除非其有一个显式""的声明,否则会出错。char str[] = "abc456";// 有一个隐式的""存储 char chs[] = {"a","b","c","4","5","6"}; printf("%s %s ",str,chs); // abc456 abc456烫abc456 printf("%d %d %d %d",sizeof(str),sizeof(chs),strlen(str),strlen(chs)); // 7 6 6 14,14是一个随机值;3 C语言中表示字符串常量的约定   虽然C语言中没有字符串数据类型,但却允许使用"字符串常量"。字符串常量是由双引号括起来的一串字符,在表示字符串常量时,不需要人为在其末尾加入‘’,例如字符串常量"Hello!"不必写成"Helllo!",C编译程序将自动完成这一工作,在末尾加上结束标志" "。   字符串常量与其它常量不一样,其存储在内存的常量区。4 C语言中字符串常量给出的是地址值。   一个字符串常量都分别占用内存中一串连续的存储空间。这些连续的存储空间实际上就是字符型的一维数组。这些数组虽然没有名字,但C编译系统却以字符串常量的形式给出存放每一字符串的存储空间的首地址,不同的字符串具有不同的起始地址。也就是说,在C语言中,字符串常量被隐含的处理成了一个以""结尾的无名字符型一维数组。因此,若有以下定义:   char*sp, s[10];   则以下赋值语句是不合法的。   s = "Hello!";   因为,字符串常量在赋值过程中给出的是这个字符串在内存中所占的一串连续存储单元的首地址,而s是一个不可重新赋值的数组名,因此,些赋值不合法,而以下赋值是合法的。   sp="Hello!";   此赋值语句并不是把字符串的内容放入sp中,而只是把字符串在内存中所占的首地址赋予了char类型的指针变量 sp,使指针变量 sp 指向该字符串。   当然,也不能使用sp去修改其指向的常量值,如   sp[2] = "L"; // 非法操作   如果需要操作字符元素,将其存储到数组中即可。5 字符数组与字符串的区别   字符数组的每个元素中可存放一个字符,但它并不限定最后一个字符应该是什么,而在C语言中,因为有关字符串的大量操作都与串结束标志""有关,因此,在字符数组中的有效字符后面加上""这一特定操作后,我们就可以把这种一维字符型数组"看作"字符串变量,但它又不同于一般的变量。要注意的是,仅仅可以在字符数组内存放字符串,不能通过赋值语句将字符串常量或其他字符数组中的字符串直接赋给字符串变量。换句话说,字符串是字符数组的一种具体应用。   看汇编:5: char arr[] = "Hello"; 00401028 mov eax,[string "hellow" (00422f78)] 0040102D mov dword ptr [ebp-8],eax 00401030 mov cx,word ptr [string "hellow"+4 (00422f7c)] 00401037 mov word ptr [ebp-4],cx 6: char *p = "Hello"; 0040103B mov dword ptr [ebp-0Ch],offset string "hellow" (00422f78)   字符串常量存储在常量区,例如上例"Hello"存储在(00422f78)。6 字符串与文本文档   小的文本文档你可以用一个字符串或字符串数组来处理,使用" 做换行来分段即可。   大的文本文档你可以通过链表(链式存储)来存储,链表的一个节点可以存储一个段落。   与文本文档相关的输入输出,使用FILE结构体和相应的一些文件处理函数即可完成。   -End-

消失的玛雅星在我们赖以生存的太阳系内有很多未解之谜九大行星的火星和木星之间本该有颗行星的地方,却成为千万颗小行星八大行星都是自西向东自转,唯独金星相反天王星总是在轨道上绕太阳旋转。虽然这些谜题地球上本来没有人,人类从何而来?第一个诞生的人是男人还是女人你曾经有没有想过?地球上本来没有人,但我们是从哪里来的呢?第一个男人和女人又是什么时候诞生的呢?40亿年前,一个被尘埃和岩石包裹的球体在浩瀚的太空中运行旋转着,没错,它正是地球,在研究揭示珠江流域近60年极端降水时空变化特征日前,省科学院广州地理研究所粤港澳大湾区城市群生态系统观测研究站水资源研究团队徐飞等通过分析珠江流域57个气象站点19602018年间逐日降水量资料,利用12个极端降水指标揭示了极开放式厕所惊现景区!网友不敢我想上个厕所,可这能上吗?10月3日,在四川乐山犍为县世界茉莉博览园内,网友小磊子在网上发布了一条视频,对该景区内一处开放式卫生间进行吐槽。开放式厕所记者在该名网友拍摄的视频中看到ModelY超哈弗H6,比亚迪两倍于蔚小理,新能源市场喜中有忧?如果你关心汽车行业新闻,那么这两天特斯拉9月销量破5万的消息一定占据各大版块头条,但你知道么?即使特斯拉9月销量暴增,放眼整片新能源车市场也只能屈居老二的位置,因为比亚迪9月卖出了杨倩孙一文代言接到手软,为何全红婵张雨霏却没有市场?东京奥运会和西安全运会相继落下帷幕,对于普通运动员们来说,终于可以迎来久违的假期了,但对于奥运顶流们来说,真正忙碌的时间才刚刚开启。毕竟,备战了5年的奥运周期,终于迎来了收获的季节幼儿园超前教育是揠苗助长,小学二年级逐渐显现,家长需重视对于80后,90后的学生们来说,学生时代是充满着欢声笑语的,随着时代的发展,家长对教育更加重视,似乎从幼儿园开始,就已经内卷了起来,重视孩子的全面发展,也重视他们的学习成绩。幼儿园市场价格跌至新低,iPhone12新售价,标配版本价格亲民手机市场今年的手机市场上啊,苹果公司的手机产品可以说是在发布之前就将下半年的手机市场热度瓜分了一大半了。不过相信对于苹果公司的手机产品并不是很关注的朋友,应该还不知道吧,苹果公司今黑科技火星直升机在空气稀薄的火星上,如何稳健起飞?从上世纪70年代开始,NASA就已经开启了对火星的探索,发展到今天火星似乎已经成为了NASA的后花园,想去就去想走就走。去年NASA对火星发射的毅力号火星探测器,还实现了人类历史上研究人员利用AI估计世界上85的人口受到气候变化的影响据外媒CNET报道,气候变化已经到来。如果我们不尽快采取行动,它将变得更加糟糕。这是政府间气候变化专门委员会8月发布的一份具有里程碑意义的报告的主旨,该报告警告说,地球上的每个地区哈勃继任者百亿美元的韦伯望远镜抵达南美,2个月后发射澎湃新闻记者刘航根据美国宇航局10月12日消息,造价100亿美元世界上最大最复杂的空间科学天文台詹姆斯韦伯太空望远镜(JamesWebbSpaceTelescope,简称JWST或
雷军小米手环7采用1。62英寸AMOLED显示屏,可视面积增加25IT之家5月21日消息,今日早间,小米创办人董事长兼CEO雷军通过社交媒体表示,小米手环7屏幕大升级,采用1。62AMOLED显示屏,可视面积增加25。官方海报显示,小米手环7整体美锦能源走势分析技术面当前沿5日均线震荡上行,MACD走强,位于BOLL中轨上方,虽上冲受压30日均线压制。但资金做多意愿比较强,下方有一定的筹码支撑,短期依托5日均线支撑,有望再向上冲击。基本面颠覆认知?距离大海2000公里贝加尔湖,发现多种海洋生物,为何?贝加尔湖出现大量海洋生物谈论起贝加尔湖,大家的第一印象是什么呢?是一望无际的碧波荡漾吗?是世界淡水资源最丰富的湖泊吗?还是苏武赶着羊群第一次看到贝加尔湖的震撼?亦或者是对那段历史深人类最远寿命最长的旅行者1号飞船,无法正常采集数据之谜图片来源NASAJPLCaltech美国宇航局的旅行者1号航天器,在这位艺术家的概念中展示了在太空中与恒星场一起旅行,自1977年以来一直在探索我们的太阳系,以及它的双胞胎旅行者2南大洋年吸碳量,约比释放量多5。3亿吨,地球会大降温吗?地球现在面临着很大的危机,资源紧缺,温室效应人口增长等都给我们带来了沉重的伤害,其中温室效应问题最为显著。冰川融化你们知道温室效应会造成哪些问题吗?气温升高,冰川融化,严重破坏生物神舟14号蓄势待发!3名航天员中或有女性,天舟4号物品清单暗示了神舟13号航天员的安全返回,代表着中国空间站跨入到全面建设阶段,计划好的6次航天发射现已完成了1次,即天舟4号货运飞船的发射,天舟4号成功对接天和核心舱后向端口,增长了中国空间站的天象预告双星伴月火星木星相合月掩金星,精彩别错过下周将要出现的天象有5月25日火星木星双星伴月,5月27日月掩金星,5月29日火星合木星。下弦月出现在5月23日2点43分。火星木星双星伴月5月下旬,月亮又会出现在早晨的东方天空,OPPO爆发了,120Hz三星屏29分钟满电量,12256GB旗舰跌至2599元中国手机市场份额中,华为因为产品更新速度很慢,又没有新5G手机推出,已经跌出前五名,而OPPO和vivo排名前二,这两家手机厂商,在国内市场销量确实很好,线下市场依然很火爆,当然线VMESHOU(唯蜜瘦)3。0全新上市,智能互联赋能创新企业高质量发展近日,湖南旻一科技有限公司(以下简称旻一科技)旗下具有自主知识产权的VMESHOU(唯蜜瘦)品牌正式发布新品。全新VMESHOU(唯蜜瘦)3。0便携式腹部智能按摩仪不仅在包装外观上还在犹豫怎么选购电视!看完它让你知道买电视这几个坑千万不能踩随着智能概念的兴起,越来越多的智能产品问世,就连电视也一样,没个智能电视的噱头,都不好意思称自己为电视。不可否认,家居智能化是未来家电发展的主流趋势,但是智能电视也存在着非常多的问在养育小孩的过程中,有哪些育儿神器值得分享?我推荐听力熊学习机。从幼儿园上第一节英语课开始,儿子就对英语有一种偏执的爱,每次路过培训班都让我给他报课。作为一个有过15年小学英语教龄的我真的有些惭愧,但也深知,英语学习一旦开始