《C语言软件工程师笔试题大全.docx》由会员分享,可在线阅读,更多相关《C语言软件工程师笔试题大全.docx(39页珍藏版)》请在课桌文档上搜索。
1、网络平安应具有以下五个方面的特征I保密性:信息不泄我给非授权用户、实体或过程,或供其利用的特性.完整性:数据未经授权不能进行改变的特性.即信息在存储或传检过程中保持不被修改、不被破坏和丧失的特性。可用性:可被授权实体访问并按需求使用的特性,即当街要时能否存取所需的信息.例如网络环境下拒绝效劳、破坏网络和有关系统的正常运行等椰屈于对可用性的攻击:可控性:对信息的传播及内容具有捽制能力.可审查性:出现平安闫题时提供依据与手段第一局部:根本感念及其它问答的1、关键字Sta1.ie的作用是什么?这个简学的问题很少有人能答复完全。在C语言中,关道字S1.aIiC有三个明显的作用:1) .在函数体,一个被
2、声明为附态的变埴在这一函数被调用过程中维持其值不变.2) .在模块内(但在函数体外),一个被小明为解态的变盘可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变盘,3),在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用.那就是,这个函数被限制在声明它的模块的本地范附内使用.本地化数据和代码范围的好处和重要性).2, ijur与指针的区别毡什么?答、D引用必须被初始化,指针不必,2)引用初始化以后不能被改变,指针可以改变所指的对象.3)不存在指向空值的引用.但是存在指向空值的指针.指针通过某个指针变盘指向一个对象后,对它所指向的变最间接悚作.程序中使用指许,程
3、序的可读性差:而引用本身就是目标变最的别名,对引用的操作就是对目标变量的掾作.流操作符和、赋值操作符=的返回值、指贝构造函数的参数、赋值操作符=的参数、其它情况都推荐使用引用.3, .h头文件中的ifndef/dCfineendif的作用?答:防止该头文件被曳及引用.4、Sinc1.ude与Kinc1.ude*,fi1.e.h的区别?答:前者是从S1.andard1.ibrary的路径寻找和引用fi1.e.h,而后者是从当前工作路径搜寻并引用fi1.e.h,5.描述实时系统的根本特性答:在特定时间内完成特定的任务,实时性与可靠性.6、全局变量和局部变录在内存中是否有区别?如果有,是什么区别?答
4、:全局变琏他存在静态数据区,局部变量在堆枝中。7.什么是平衡二叉树?答:左右于树格是平衡二叉树且左右子树的深度差值的绝对值不大于I.8、堆栈溢出一般是由什么原因导致的?答:1.没有回收垃圾资源2.层次太深的递归调用9、H泡排序算法的时间或杂度是什么?答:0(n2)10、什么函数不能声明为虚函数?答:constructorIk队列和栈有什么区别?答:队列先进先出,栈后进先出12、不能做SWiICh。的参数类型答:SWi1.Ch的参数不能为实型.13、局部变Ift能否和全局变量重名?答:能.局部会屏蔽全局.要用全局变fit需要使用:同部变盘可以与全局变量同名,在函数内引用这个变瓜时.会用到同名的局
5、部变1上而不会用到全局变量,对于有些编详器而言,在同一个函数内可以定义多个同名的局部变业,比方在两个循环体内都定义一个同名的局部变殖,而那个局部变量的作用域就在那个砧环体内14.如何引用一个已经定义过的全局变盘?答、可以用引用头文件的方式,也可以用extern关罐字,如果用引用头文件方式来引用某个在头文件中声明的全局变量.假定你将那个变名写情了,那么在编译期间会报惜,如果你用extern方式引用时,假定你犯了同样的错误,那么在嫔译期间不会报错,而在连接期间报错.15、全局变眼可不可以定义在可被多个.C文件包含的头文件中?为什么?答、可以,在不同的C文件中以StatiC形式来声明同名全局变朋.可
6、以在不同的C文件中声明同名的全局变量.前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错.16、语句for(:1;)有什么问魄?它是什么意思?答、和hi1.e(D相同,无眼循环。17、doWhiI。和WhiICdo有什么区别?答、第一个循环一遍再判断,后一个判断以后再砧环。18、Statac全局变St局部变量、函数与普通全局变眼、同部变量、函数答、全局变显(外部变JA)的说明之前再冠以StatiC就构成了静态的全可变瓜.全局变配本身就是静态存储方式,静态全局变妆当然也是静态存储方式。这两科在存储方式上并无不1可,这两者的区别虽在于非伸态全局变显的作用域是整个源程序,当一个源程序由多个
7、源文件祖成时,非衿态的全局变鳍在各个源文件中都是有效的.而静态全局变量则限制了其作用城,即只在定义该变量的就文件内有效.在同一源程序的其它源文件中不能使用它.由于步态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以防止在其它源丈件中引起错误。从以上分析HJ以看出,把同部变用改变为伸态变状后是改变了它的存储方式即改变了它的生存期“把全局变量改变为静态变显后是改变了它的作用域,限制了它的使用范B1.static函数与普通函数作川城不同.仅在本文件.只在当前源文件中使用的函数应该说明为内部函数(Static).内部函数应该在当前海文件中说明和定义.对于可在当前海文件以外使用的
8、函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件Static全局知与普通的全局知:有什么区剧:SIaIiC全局变量只初使化一次,防止在其他文件单元中破弓I用;static局部受量和普maHtAEa:StatiC局部变量只被初始化一次,下一次依据卜一次结果值:static函数与普通函数有什么区别:StatiC函数在内存中只有一份,普通函数在每个被网用中维持一份拷贝19、程序的内存分配答:一个由cC+*编许的程序占用的内存分为以下几个局部1.栈区(StaCk)一由漏译器自动分配择放.存放函数的参数值,局部变址的值等.共操作方式类似于数据结构中的栈-2、堆区heap一做由程序员分
9、配林放,若程序员不群放,程序站农时可能由OS回收,注意它与数据结的中的堆是两回事,分配方式倒足类似于锥表,MMo3,全局区静态区(static)-全局变量和静态变fit的存储是放在一块的,初始化的全局变肽和静态变Ift在一块区域.未初始化的全局变仪和未初始化的静态变晶在相邻的另一块区域.程序结束后由系统择放.4、文字常景区一常WM字符申就是放在这里的.程序结束后由系统样放。5、程序代码区一存放函数体的二进制代码例子程序这是一个前辈写的,非常详细/main.CPPinia=0;全局初始化区charp1.:/全局未初始化区main()(inb:栈chars三*abc*;栈char*p2;/栈cha
10、rp3=123156n;/1231560在常用区,p3在栈上。sia1.icintC=0:/全局(静态)初始化区P1.-(char*)ma11oc(10):p2=(char*)ma1.Ioc(20);分配用来得10和20字节的区域就在堆区.StrCPy(P1.J1.23456);/1234560放在常贵区,编译零可能会符它与p3所向123456”优化成一个地方.20、解择堆和栈的区别答:堆(heap)和栈(SIaCk)的区别1)申请方式StaCk:由系统自动分配.例如,声明在函数中一个局部变奴intb:系统自动在校中为b开辟空间heap:需要程序员自己申诂,并指明大小,在C中InHIIoC函数
11、如p1.=(char*)ma1.Ioc(IO);在C+中用IMJW运算符,如p2=(char*)maUoc(10):但是注怠p1.、p2本身是在栈中的。(2)申请后系统的响应栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则格报异常提示栈溢出.堆:首先应该知道操作系统有一个记录空闲内存地址的流表,当系统收到程序的申清时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链衣中删除,井将该结点的空间分配给程序,另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小.这样.代码中的de1.ete谱句才能正确的择放本内存空间.另外,由于找到的堆结点的
12、大小不一定正好等于申请的大小,系统会自动的将多余的那局部由新放入空闲链表中。(3)申请大小的限制栈:在UindOWS下,栈是向低地址扩展的数据结构.是一块连续的内存的区域.这句话的意见是栈原的地址和栈的最大容ht是系统段先规定好的,在W1.M)OWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数,如果申谢的空间超过校的剩余空间时,将提示OVerfIO-因此,能从栈获得的空间较小,堆:堆是向高地址扩展的数据结构,是不连续的内存区域,这是由于系统是用锥表来存储的空闱内存地址的,自然是不连续的,而锥表的遍历方向是南低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存.由此可%.
13、唯获得的空间比较灵活,也比较大.ova1,byteptredx+1.5FC三ovbyteptreb-1j,a1.第一神在读取时自接就把字符小中的元泰读到存放器C1.中,而第二种则要先把指针值读到CdX中,在根据cd*读取字符.彩然慢了.21、什么是预嫔译,何时需要预编译?答:预编译又称为预处理,是做些代码文本的替换工作,处理才开头的指令,比方指贝目inc1.ude包含的文件代码,#dcQnc宏定义的普换,条件编译等,就是为编译做的预备工作的阶段,主要处理*开始的预编诉指令,预编译指令指示了在程序正式娟译前就由循译携进行的操作,可以放在程序中的任何位?1.C编译系统在对程序进行通常的编译之前,先
14、进行预处理C类供的H处理功能主要有以下三种:1)宏定义2)文件包含3)条件编译22、关键字COnS1.是什么含意?等:“const意味着常数.业余者.“只读.正确的答案.constinta;a是一个常整型数intconsta:a是一个常察型数constint*a;a是一个指向雷整型数的指针(也就是,整型数是不可修改的,但指针可以。int*consta:a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可蟋改的)intconst*aconst;a是一个指向常整型数的常指针(也就是说,指针指向的整里数是不可修改的,同时指针也是不可修改的)1) .关键字ConSt的作用是
15、为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的.如果你用花很多时间消埋其它人留下的垃圾,你就会很快学会感谢这点多余的信息.(当然,懂得用const的程序员很少会例下的垃圾让别人来清理的.)2),通过给优化器一-亚附加的信息,使用关键字COnS1.也许能产生更紧凑的代码。3).合理地使用关城字ConSt可以使编译推很自然地保护那些不帘望被改变的参数.防止其被无意的代眄修改.简而古之,这样可以减少bug的出现23、关键字v。IaIi1.e有什么含意并给出三个不同的例子。答:一个定义为丫。IaIi1.e的变量是说这变量可能会被总忽不到地改变,这样,编
16、译器就不会去假设这个变量的值了.精确地说就是.优化器在用到这个变M时必须每次都小心地重新读取这个变盘的值.而不是使用保存在存放器里的备份.下面是v。Iati1.e变Ift的几个例子:1),并行设备的硬件存放器inta;a=*ptr;returnaa:)24、三种根本的数据模型答:按照数据结构类型的不同,物数据模型划分为层次模型、网状模型和关系模型.25、结构与联合有和区别?答:(1),结构和联合都是由多个不同的数据类型成员如成,但在任何同一时刻,联合中只存放了一个被选中的成员(所有成员共用一块地址空间),而结构的所行成员都存在(不同成员的存放地址不同).(2)对于联合的不同成员贼伯,将会对其它
17、成员理写,原来成员的伯就不存在了,而对于结构的不同成员贼依是互不影响的26、描述内存分配方式以及它们的区别?答:1)从传态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全国变S1.static变质.2)在栈上创立。在执行函数时,函数内同部变卡的存储单元都可以在栈上创立,函数执行结束时这些存偌单元自动被移放。栈内存分配运算内置于处理器的指令集。3)从堆上分配.亦称动态内存分配.程序在运行的时候用三a1.Ioc或nen申请任意多少的内存.程序员自己负说在何时用free或de1.ete择放内存.动态内存的生存期也程序员决定,使用非常见活,但时速也最多27、说
18、说出ConSt与define相比,有何优点?答:CUnSt作用:定义整量、修饰函数卷数、修饰函数返回值三个作用,被Cons1.修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性.DConSt常域有数据类型,而宏常盘没有数据类型.嫔评器可以对前者进行类型平安检2b而对后者只进行字符件换,没彳i类型平安检杳,并且在字符杵换可俄会产生意料不到的错误,2)有些集成化的调试工具可以对ConSt常量进行调试,但是不能对宏常砧进行调试.28、简述数组与指针的区别?答:数组要么在部态存储区被创立(如全局数组,要么在栈上被创立,指针可以的时指向任意类型的内存块,(1)修改内容上的差异chara=h
19、e1.1.o*;a0=,X,:charp=wor1.d;注意P指向常量字符中p0=4X:/编译器不能发现该错误,运行时错误(2)用运算符SiZeof可以计算出数S1的容量(字节数。Sizeof(P)1P为指针得到的是一个指针变显的字节数.而不是P所指的内存容fitC+C谱吉没有方法知道指针所指的内存容量,除非在申请内存时记住它.注就当数组作为函数的参数进行传递时,该数组臼动退化为同类型的指针.chara-he1.Iowor1.d*;charp=a;coutsizeof(八)end1.;/12字节coutSiZeor(P)end1.:/4字节计算数组和指针的内存容量voidFunc(chara1
20、.(K)(coutsiZCOf(八)end1.;/4字节而不是100字节)29、分别写出Boo1.,int,f1.oat,指叶类型的变值a与“零”的比较语句.冷BOO1.:if(!a)orif(八)int:if(a0)f1.oat:constEXPRESSIONEXP二0.OOOOO1.ifa-EXP)pointer:if(a!=NU1.1.)orif(a=NU1.1.)30、如何判断一段程序是由C解译程序还是由C+编诏程序摭谛的?答:Sifdef_cp1.usp1.uscout*c+*;e1.seCOU1.op;应试苕如给出上面的方案,这说明或拧他是一个汇编语古程序公(这也许是好事或者他是一
21、个想进入新领域的Basiczfortran程序员。34、位操作(Bitmanipu1.ation)答:收入式系统总是要用户对变量或存放器进行位操作.给定一个整型变量a.写两段代码,第一个设置a的bit3,第二个去除a的bit3.在以上两个盘作中,要保持其它位不变.时这个问魄有三种根本的反应D不知遒如何口手.该被面者从没整过任何嵌入式系统的工作.2)用bitfie1.ds.Bitfie1.ds是被扔到C谱古死角的东西,它保证你的代码在不同编译器之间是不可移植的,同时也保证了的你的代码是不可乘用的.我或近不幸看到InfineOn为其较坡杂的通信芯片写的驱动程序,它用到了bitfie1.ds因此完全
22、对我无用,因为我的编译器用其它的方式来实现bitfie1.ds的。从道例讲:永远不要止一个非嵌入式的家伙粘实际硬件的边。3)用Sdefines和bitmasks操作.这是一个有极高可移植性的方法.是应该被用到的方法.最正确的解决方案如下:UdefineBIT3(0x13)staticinta:voidset_bit3(void)(aI=BIT3;)voidc1.ear_bit3(void)(a&=BIT3:)一些人喜欢为设置和去除值而定义一个掩码同时定义一些说明常数,这也是可以接受的.我带电看到几个要点:说明常数、I=和4=操作.35、访问固定的内存位置(Accessingfixedmemor
23、y1.ocations)答:嵌入式系统经常具有要求程序员去访问某特定的内存(置的特点。在某工程中,要求设置一绝时地址为0x67a9的整型变量的值为OXaa66.焉译潺是一个纯粹的ANS1.编译器.写代码去完成这一任务,这一问遨测试你是否知道为了访问一绝对地址把一个整型数强制转换(typecast)为一指针是合法的.这一问即的实现方式随卷个人风格不同而不同,典里的类似代码如下:int*ptr:Ptr=(int*)0x67a9:*ptr=OXaa66;Amoreobscureapproachis:一个较J涩的方法是:*(int*const)(0x67a9)=OXEIa55:即使你的品味更接近第二种
24、方案,但我建议你在面试时使用第一种方案.36、中断(Interrupts)答:中断是嵌入式系统中重要的组成局部,这导致了很多编许开发商提供一种扩展一让标准C支持中断。具代表事实是.产生了一个新的关圾字interrupt.下面的代码就使用了_intrupt关杨字去定义了一个中断效劳子程序(ISR),请评论一下这段代码的.interruptdoub1.eCOmPUIe_area(doub1.eradius)doub1.earea-PI*radius*radius;printf(*nArea=f*,area);returnarea:这个函数有太多的错误了,以至让人不知从何说起了;DISR不能返回一个
25、值.如果你不做这个,那么你不会被雇用的,2)ISR不能传递参数.如果你没有看到这一点,你被雇用的时机等同第一项.3)在许多的处理器爆译器中,浮点股椰是不可曳入的.有些处理器,编译器需要让故处的存放着人栈,有些处理器/编译器就是不允许在ISR中做浮点运算,此外,ISR应该是短而有效率的,在ISR中做浮点运算是不明智的。4)与第三点一脓相承printf()经常有理入和性能上的何也.如果你丢捧了第三和第四点,我不会太为难你的.不用说.如果你能每到后两点,那么你的被展用前景越来越光明了.37、动态内存分出(DynaaicBeaorya1.1.ocation)答:尽管不像非战入式计算机那么常见,嵌入式系
26、统还是有从堆(heap中动态分配内存的过程的。那么嵌入式系统中动态分配内存可能发生的问题是什么?这里,我期里应试着能提到内存砰片,砰片收集的何超,变盘的持行时间等等.这个主遨已经在ESP杂志中被广泛地讨论过了(主要是P.J.P1.auger,他的解杼远远都过我这里能提到的任何解和),所有回过头看一下这些杂志吧!让应试者进入一种虚假的平安感觉后,我拿出这么一个小节目:下面的代码片段的输出是什么,为什么?char*ptr;if)=NU1.1.)pu1.s(*Gotanu1.1.pointer);e1.seputs(*Gotava1.idpointer*);这是个有趣的问题,以近在我的一个同再不羟点
27、把。值传给了函数U1.a1.1.oc,得到了一个合法的指针之后,我才想到这个问题。这就足上面的代码,该代码的输出是Go1.ava1.idpointer.我用这个来开始讨论这样的一HS1.i-存存被面试者是否想到库例程这样做是正确.得到正确的答案固然重要.但解决何超的方法和你做决定的根本原埋更重要些.38、Typedef答:TyRder在。语言中频繁用以声明一个已经存在的数据类型的同义字。也可以用预处理器Itt类似的事。例如,思考一下下面的例子:RdefinedPSstructS*IyPedefstructS*tPS;以上两种情况的意图都是要定义dPS和IPS作为一个指向结构S指针,哪种方法更好
28、呢?(如果有的话)为什么?这是一个非常微妙的问应,任何人答对这个问应(正当的原因是应当被泰春的.答案是:typed”更好.思考下面的例子:dPSp1.,p2;tPSp3,p1.:第一个扩展为structS1.,p2;上面的代码定义PI为一个指向结构的指,成为一个实际的结构,这也许不是你想要的。笫二个例子正确地定义了p3和p4两个指针.39、用变效a饴出下面的定义答:a)一个整型数(Aninteger)b)一个指向整型数的指针(Apointertoaninteger)c)一个指向指针的的指针.它指向的指针是指向一个整型数(pointertoapointertoaninteger)d)一个有10个
29、整型数的数组(Anarrayof10integers)e)一个有IO个指针的数组,该指针是指向一个整型数的(Anarrayof10pointerstointegers)f)一个指向有10个整型数数组的指针(Apointertoanarrayof10integers)g)一个指向函数的指针,该函数有一个整型参数并返回一个整型数(Apointertoafunctionthattakesanintegerasanargumentandreturnsaninteger)h)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数(narrayoftenpointerstofun
30、ctionsthattakeanintegerargumentandreturnaninteger)答案是:a) inta;/nintegerb) inta;/pointertoanintegerc) int*a;/Apointertoapointertoanintegerd) inta10:/Anarrayof10integerse) inta10;/Anarrayof10pointerstointegersf) int(*a)10;/Apointertoanarrayof10integersg) int(*a)(int);/Apointertoafunctionathattakesanin
31、tegerargumentandreturnsanintegerh)int(*a10)(int);/Anarrayof10pointerstofunctionsthat1.akeanintegerargumentandreturnaninteger40、解择局部变垃、全局变豉和群态变显的含义.答:41、写一个“标准”宏答:交换两个参数值的宏定义为:SdefineS)(八)=()+(b)j(b)=(八)-(b);(八)=(八)-(b);输入两个参数,辎出较小的一个:SdefineMIN(A1B)()next,并Bfi后JM除原next指向的节点.第:局部:程序代码评价或者找错1、卜面的代码输出是
32、什么,为什么?voidfoo(void)unsignedinta=6;intb=-20:如+b6)?puts(6):puts(4,6原因是当表达式中存在有符号类型和无符号类型时所有的操作数布自动传换为无符号类型。因此-20变成了一个非常大的正整数,所以该表达式计算出的结果大于6,这一点对于应当频索用到无符号数据类型的嵌入式系统来说是丰常重要的。如果你答错了这个问题,你也就到了得不到这份工作的边缘.2,评价下面的代码片断:unsignedintzero=0;unsignedintComPZCrO=OxFFFF:*1.zsco三p1.ementofzero/对于一个int型不是16位的处埋器为说,
33、上面的代码是不正确的。应编写如下:unsignedintcompzero=0;这一问题口正能揭羯出应试者是否做得处理器字长的重要性.在我的经脸里,好的嵌入式程序员非常准确地明白硬件的细节和它的局限,然而PC机程序往往把坡件作为一个无法防止的烦恼.3、C语吉同意一些令人寰惊的结构,下面的结构是合法的吗,如果是它做些什么?inta=5,b=7,c;c=a+b;这个问遨将做为这个测验的一个愉快的结尾.不管你相不相信,上面的例子是完全符合语法的.何题是爆译器如何处埋它?水平不高的编译作者实际上会争论这个何应,根据最处理原则.编译器应当能处理尽可能所有合法的用法。因此,上面的代码被处理成:c=a+b;因
34、此,这段代码持行后a=6.b-7,c=12.如果你知道答案,或猜出正碉答案,做得好.如果你不知道答案.我也不把这个当作同.我发现这个问时的最大好处是这是一个关于代码编写风格,代码的可读性,代码的可修改性的好的话魄。4、设有以下说明和定义:typedefunion(1ongi:intk5;charc:DATE:structdata(intcat:DATEcow:doub1.edog:too;DATEBax:则语句printf(%d*,sizeof(structdaie)+siZoofgaX;的执行结果是?答.结果是:52.DATE是一个Union,变盘公用空间里面最大的变量类型是int5,占用2
35、0个字节.所以它的大小是20data是一个StrUCt,保个变I*分开占用空间,依次为int-1+DATE20+doub1.e8=32.所以结果是20+32=52.当然在某些16位编辑湍下,int可能是2字节,那么结果是int2DIE10doub1.e8-205、请写出以下代码的输出内容Uinc1.udemain(inta,b,c,d:a=10:b=a+;C=+a:d=10*a+*;printf(“b,c,d;M%d,%d”,b,c,d);return0:)6、写出以下代码的输出内容inc1.udeiniinc(inta)(return(+a);)intmu1.ti(int*a,int*bin
36、1.*c)(return(main()3、14.char*src-*he1.1.o,wor1.d*;5、char*dest=NUI.1.;6、int1.en=str1.en(src):for(inti=0;i(t=stri;stri=str1.en-i-1.:str1.en-i-1.=t;)printf(*s,str):return0:)8、请问下面程序有什么错误?inta602501000,i,j,k;for(k=0三1000k+)for(j=0;j250;j+)for(i=0ji60;+7、dest=(char*)na11oc(1on):8、char*e1.dest;aijk=0:答案:把
37、循环谱句内外换一下9、char*s=src1.en;9、请问下面程序会出现什么情况?10、Whi1.e(Ien-J=O)Ikd+=s-:12、printf(,%s*,dost);13、return0:14、.defineMax.CB500void1.miQucryCSmd(StructMSgCBpmsg)(unsignedcharUCGndNUm:答:方法1:intmain()char*src=*he1.Io,wor1.d:for(ucCdNu三R:ucCmdNwMAXCBjimiDNUM-+)()intIen=Str1.en(src):char*dost=(ChHr*)Ha1.IOC(Iem1);要为M)分配一个空间char*d=Jest:答案:死循环10、以下3个有什么区别charconstp;常t指针,P的(ft不可以修改charconstp;指向常景的指针,指向的常看值char*s=GsrcUcnT;指向最后一个字符whi1.e(Ien-!=0)*d=s-;不可以改constchar加和charconstpIK写出下面的