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

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-

烈日下的ChinaJoy,与WDBLACK邂逅一年一度的ChinaJoy又开始了,顶着36度的高温,我们来到了位于世纪公园附近的新国展。老房家就住在旁边,走路只需要五六分钟,慢悠悠的逛过来,但是今天实在是太热了,早知道就应该骑厨房利器升级,小米有品新品火候复合钢刀体验CiaoBello,我是老房。油盐酱醋的先决条件是食材,处理食材的工具就是菜刀了。老房家里的菜刀还是十年前买的,这些时间过去,老菜刀的确立下了汗马功劳,但也怪老房自己懒,并没有经常快速识别即时翻译网易有道词典笔2。0专业版体验CiaoBello,我是老房。回国十年,脱离了语言环境,虽然跟老外吹牛聊天基本还行,不过现在看一些英文文献就有点吃力了。打开手机字典查单词或者拍摄下来文字识别自动翻译等固然有用,但个头小力量足,KICA筋膜枪使用体验CiaoBella,我是老房。近期风靡一时的运动健身辅助工具非筋膜枪莫属了,利用其内部的高速电机带动枪头,产生高频震动作用到肌肉深层,达到减少局部组织张力缓解疼痛促进血液循环等作用轻薄多平台,Switch好搭档,谷粒精灵PRO游戏手柄体验CiaoBello,我是老房。俗话说的好,技术不够装备来凑,这句玩笑话不仅在运动圈非常流行,在电玩领域也很适用。各种游戏外设层出不穷,也正是印证了这一点。像老房这种比较热衷于主机游别让长辈老弯着腰追觅扫拖一体机你值得拥有CiaoBella,我是老房。这几天回家看了一次长辈。长辈嘛,特注重家里的整洁,老是扫地拖地的。我觉着家里挺干净的,但这么一扫还总能扫出大大小小垃圾来。想上手帮,但不知道扫哪里。正烧烤薯条叉烧肉,用大宇空气炸锅做零油美食,简单易上手CiaoBella,我是老房。这不天气已经逐渐转凉了,中秋十一假期就要到了,再不贴秋膘就要来不及了。为了吃,总归有借口,人生在世,吃喝二字,在健康的前提下偶尔满足下胃口还是能够接受手把手教你使用curl2py自动构造爬虫代码并进行网络爬虫来源Python爬虫与数据挖掘作者Python进阶者前几天有粉丝在问这个curl2py命令不知道怎么使用,今天这篇文章就是一个手把手教程,希望大家后面都可以用上,下面一起来看看吧!天津东疆保税港区税务局党委书记局长刘军莅临紫藤花开集团我们身为中华儿女,承载新时代使命,勇于担当,为祖国国富民安贡献力量!紫藤花开集团使命2020年8月20日,天津东疆保税港区税务局党委书记局长刘军一行5人,莅临紫藤花开集团进行走访调海信5G全能新品F50上市更大电量时刻亲情守护此前,海信手机推出旗下首款普及型5G手机F50,凭借着5G中国芯片快充长续航等诸多卖点收获了不错的好评。而现在,海信手机再加码,推出5G全能新品海信5G手机F50。强劲性能高速5G绿色设计绿色生产双轮驱动TCL科技持续打造绿色竞争力绿水青山就是金山银山,十四五时期经济社会发展主要目标之一就包括环境保护,要求国土空间开发保护格局得到优化,主要污染物排放总量持续减少,生态环境持续改善,生态安全屏障更加牢固,城乡人
从上市至今降价700元,小米11Pro这款手机值得买吗?坦白说,小米11Pro的销售黄金期已经过了,但要问我小米11Pro这款手机值不值得买,那是肯定的。为啥说这手机的销售黄金期已经过了呢?小米11Pro在上市初期定位很尴尬,前有小米1小米手机有哪些小技巧?个人也使用过一些小米手机,也算一名米粉,其实小米手机除了主流手机功能之外,还有很多实用但并不被大家所熟知的小技巧,今天我们就一起来看看小米手机的实用小技巧有哪些。技巧一小米计算器功听损患者一直反映助听器声音很大怎么办?你要问清楚是整体的声音大还是具体的哪一种的声音大,涉及的调试参数不同。另外一方面要看助听器选配的是不是合适。助听器验配有没有做声场评估呢?建议多跟验配师沟通助听器声音大则可能是调试华为和苹果你会买哪个,为什么?从来没有想过买苹果,一直用国产的,现在用的是华为。华为并不比苹果差,用华为比用苹果有面子,支持国产企业。早上好,我这后半后生只买华为(荣耀),肥水不流外人田。华为的根在中国,华为担宁夏科技金融对接蹚新路企业融资活动上云端近日,宁夏高新技术企业融资对接活动(线上专场)以公开直播形式举办,吸引20余家金融机构近百家高新技术企业等在线观看。在疫情防控常态化环境下,这是科技与金融对接新模式的成功探索。直播小红书就滤镜景点致歉部分用户存在过度美化笔记三言财经10月17日消息,针对网友吐槽小红书上滤镜景点一事,小红书今日发文致歉。小红书称,部分用户在分享过程中的确存在过度美化笔记的情况。大部分都属于旅拍美图,但由于分享者没有明确单耳耳聋需要配助听器吗?耳朵听力只要下降了就需要佩戴助听器的,因为助听器不只是能帮助你所缺失的听力有所补偿,帮助你在没戴助听器听听不到的声音,好一点的助听器还可以保护残余听力,单耳聋也是需要佩戴助听器的,用拼多多购物是种怎样的心理呢?主要是便宜啊在拼多多上消费的心理其实就一个便宜啊!为什么拼多多上的商品这么便宜呢,了解过后你就会发现,拼多多这个平台主打的是低价走量,拼多多上的商家大多都是自己有货源,或者说自己就民生信用卡有哪些活动值得关注?大家好,我是北哥,一个把玩卡当兴趣的家伙。民生卡近期活动不多,都是阶段性不持续的活动,但顺手撸个羊毛的事情,卡友们都不嫌多。全民节节高周周刷月月刷被动抽奖,三次消费达标,即可参与抽助听器在哪买?建议到当地专业验配助听器的连锁听力服务中心去咨询测听试听,专业的听力连锁机构验配师专业,服务有保障。助听器需要到正规的验配中心去验配。推荐乾耳听力,这里是专业的助听器验配机构。有着人物王小川被命运选中的人,中年重新出发记者姜菁玲编辑文姝琪随着腾讯宣布完成对搜狗的私有化收购,10月15日,搜狗十一年的CEO王小川宣布辞职。一直以来,王小川被称为天才少年,他几近被命运之手向前不断推进求学一路绿灯,6