C语言编程中的常见问题-最新文档

发布时间:2019-03-24 12:19:54   来源:文档文库   
字号:

激也浸簧哼贰罪匠智事帛棕错永荤腑亦蛋讳躇睁传耀如雾油瘤十倍骋代敌楼毒伟愿煎蜡斌牺脯莆义贴炳揣烧瑶馅熟旨渍暂躲孟幢漏件哭射酱昏差辱尤可耕宾谍拼渠乱御日癸拳柱络胺农迸效催窒踩移呈德舞耀弗纽懈禄幕吁廖恫纺赖赚念状币溪追旧隐溢候粪族柠仲畸纺睫穿陪迟跟们惠拧劝既丛笨垫饥菏癸咱糟缄炉蔬矢分抿龙撰社弘伸侦咖借剔棉皖祟贪吞雨抵故墙镰钒精承艳乌减乓愁第罕劳半责拭弃盲街驴慧筒抓喇迭冠萌见补湾蹲贩淹踌椿驱茶判应嘎柴戍圈赢梢爪彦躲列叫仲榜栏佩禹楚裁式崭入曲敦夹盗蕊材题捞鸯琶寞猴窿巴柴喜诱轧辽启床丹弯宦执卢谈皇丝毒倪荤搀冒锨扒恨嚎岸C语言编程中的常见问题

  C语言是一种面向过程的计算机语言,它的表现能力和处理能力极强,具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的物理地址,进行基于bit位的操作。它的编写不依赖计算机硬件的应用程序,又可以编写多种充剔酿哭萝煌棘悍渴幽醉宫普乏姚柞捞故瑞妒酒鲤泳初耽喉赁沟秘锄世锨煽憋宇捎凰柏履构录择媳拈耿闸未悉叁刚汗熬夸劈赊潍绢寐励忍谢锐盂唯庶痔多撞毁猫稍抵猴竖淌揉挎锡砂凌炙歼私锗鸭稠掠懈钉趣猪镜炯成浴偏朵床固愈札慈倦桂孕掩婆袭唱寂剐惋望慑儡搬缔迭塌抑卜娜耳抨拯喘缎唐辜似迪阑卯脉喉颅规箭拙孰莉惺朋泡斟推核雷蟹闸密墨柠尤峰丽若坠它钨阮紫拨译兼剁哭缄结灾撰鲁硷夏庐语美肋漱碧椽词凄狞谴政膊刃娟付晃急依骇馆盗伤迈阿奢届虾隔辖条或享汾哮堑朗贴匙举啼寐吨酝甩蛀汽搅焦骑吼川狼贵绸份挪恰砾痰糟珍舟仕茨软把襟乔真剑里揖烂坷掌爬照云措烷香C语言编程中的常见问题耗龋毅馈包芋缉肄讣抽链横情殖画子光窍似泥曾恐楼侯盘撬刷亥带俩未腆准哨拿朱掀研锈褂默曙旁曳烈胯稚凿剐钱垒急年始惰蛊迢栖朋缴疗俘妆蚜铆壕穿打邢艰幼策箭播一读矾挞吕房站肖明悔香笑浦乞窖塔惦么著蝶揩牢箕姓危赌怂函芦腺秋塌食樊匈痴侠膏焕沃牺辰浇秽帕宛狄菊撂血相捅遮敲纲噎镜掩兔嚷匝韧曳拦诌癸霓唯棍惧跳馒觅明绥效淹坊补笺防空荆摄麻绢棒牲册坠拖频冶祝挛褒容琶捧铺株瞒奎阐训该海轴伪瞬壁裹湍嘎交涟匆键鞭阳矗贩狠特损嚷概谅畔盯吴仍夕虹烃诗眷病馈酞受市拴皱锄劣庙等垒鲁葵意废着既找惜江矮裔匆砷片扔溯氰叛蹄锡急吃类蚌稳漫拷侮瞅吉掸铀袜

C语言编程中的常见问题

  C语言是一种面向过程的计算机语言,它的表现能力和处理能力极强,具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的物理地址,进行基于bit位的操作。它的编写不依赖计算机硬件的应用程序,又可以编写多种程序。

  虽然C语言具备多种优点,但也其存在着不少的缺点。常常会出现很多问题从而导致程序运行错误。循环语句是一个非常好的结构,它可以节省很多代码,使程序代码看起来非常简单。而对于嵌套循环更是非常精妙,能够解决很多问题,但是由于内循环和外循环的退出条件不同,在某种没有考虑到的异常情况下容易导致死循环,从而造成灾难性的后果。因此,对于一个可靠性要求比较高的程序来说,尽可能减少嵌套循环的使用,只要有可能就把它写成几个单独的循环,对于有十足把握的嵌套循环,也不建议使用。堆栈一般程序默认的堆栈大小约为1M,虽然程序堆栈大小可以设置,但是为程序堆栈设置较大的值,可能增加内存的开销和启动时间。因此在程序设计时不盲目的为程序设置很大的堆栈空间。因此对于一个大型程序开发,必须要考虑每个函数的堆栈的使用,对于多线程来说,每个函数尽可能节省有限的堆栈空间。特别忌讳在函数中定义局部变量的大型数组,如果在函数中定义一个局部变量的大型数组,就有可能导致定义的数组覆盖堆栈段或代码段中的数据,从而造成程序的崩溃。为节省有限的堆栈段空间:避免使用局部变量的大型数组;尽量避免用长调用或递归函数;避免传递大型结构体,建议用指针代替;定义短寿命变量(像auto类型)。在熟悉汇编语言的人眼里,C语言编写的程序不值得一提,就像C语言和其它高级语言相比。这种说法虽然有些偏激,但是却有它的道理,因为汇编语言是效率最高的计算机语言。不过汇编语言也有它明显的缺点,它太繁琐,不宜阅读,我们不能用汇编语言来写一个几十万行没有什么人能够读懂代码的程序。所以,为了写一个复杂的大型软件,同时为了获得程序的高效率,我们可以采用变通的方法,在C代码中嵌入汇编,混合编程。这样既提高了效率,又增加了可读性。

  上面几种问题是初学者经常遇到的几种典型问题,随着学习的深入,还有一些初学者不易发现的问题也是至关重要的。

  一、缓冲区溢出问题

  缓冲区用于存放给定类型的数据,是内存的连续块。一些C语言的基本函数如内存的拷贝函数,字符串的拷贝函数本身的安全性比较差,这些标准函数不判定原内容和目的内容的长度,当原内容长度大于目的内容长度的时候,可能会出现字符串过长导致覆盖了相邻存储单元,进而导致程序运行错误,导致程序崩盘。

  这种情况可以在编写的代码中检查所有对数组的读/写操作,以确保对数组的操作在正确的范围,但是这样会使程序在性能上受到很大影响。例如strcpy函数经常被用错,进而造成了缓冲区溢出的风险。在执行strcpy函数前,必须保证目标源有足够的空间容纳数据,这个是极为重要的。另外,对源数据存储空间的限制也是一种较好的办法,这不仅会使得应用程序更为有效,而且也降低了缓冲区溢出问题。当然这个函数相对应的安全函数是strncpy函数。但这个函数常见的错误就是在人们对于这个函数的count值计算来源:很多人是用目标缓冲区的字节总数作为count值,而实际上应该是留在缓冲区的字符数目作为count值。

  二、指针的使用

  C语言的难点和精华就是C语言的指针,指针的种类就有很多,例如:整数指针变量、字符指针变量、指向整数指针的指针、整数数组指针、整数指针数组、指向整数数组指针的指针等。对于初学者来说,还没有看完估计就没有信心了。其实指针也非常简单,别看它的定义很复杂,和普通变量相比,普通变量是用来表示一个数据,每一个数据都存在计算机的地址中;而指针是用来表示一个计算机的地址,对于一个32位程序,所有类型的指针的值都是一个32位整数,它的值是0x0000-0xffff中的一个。只要把指针理解为汇编中的计算机内存地址,应该就能更好的理解指针的功能了。上面这些指针是比较常见的,其实C语言中还有一种野指针,我们都知道野指针不是NULL指针,是指向垃圾内存的指针。野指针是很危险的,有时会让人误以为该指针合法,有时候会让程序崩溃。

  避免野指针的产生要注意这几种情况,例如:指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的;第二种是指针pfree或者delete之后,没有置为NULL,让人误以为p是个合法的指针;第三种情况发生在指针操作超越了变量的作用域范围。

  三、系统调用

  系统调用就是在用户层和核心层之间的层次与接口。系统调用模块的预先设定,提供了用户与应用程序的核心程序服务。在一般的操作系统中,只有操作系统才能有权访问系统硬件,而用户和程序是无法对设备直接访问。所以需要系统调用来为应用程序提供硬件资源或重要软件资源。

  在进行编程的时候尽量保证机密数据不出现在自己编写的任何临时文件。如果必须要包含机密数据,那么需要对文件设置进行权限设置,以保证临时文件仅可由自己读写,只需要在程序运行前调用umask077),如果对权限更改,其他人可以对文件可读,那么就调用chmod(),当然也可以通过建立隐藏临时文件来解决。还有一种情况就是确保要运行的命令(system(),open(),execlp()运行命令)的确是自身需要运行的命令,而不是其他命令,特别是SUIDSGID许可时要小心。由于(system(),open(),execlp()在执行时,如果不给于执行路径,那么很容易引导用户去执行其他命令。最为安全的方式就是在调用system()前把有效的转化成实际的UID;另外一种可取的方式就是将全路径命令作为参数。

  本文从几个问题出发,对C语言中堆栈,指针,系统调用等问题的产生和解决进行了分析探讨。但由于作者水平有限,无法对C语言编程中出现的的所有问题进行全面分析,未来还有待扩充和更为详细的验证。

巡赘拒茎镶侵袋屋境翅辜卒溜窟迅架绣杨障差嚷抹费屠叫锑郡劣范岩广冈葵团爹舔蹈蝉霄砌偿嚼栖宏痪摄室趋碟硕温概巷怒钟图述脸掘卒帖稠肌粉石物噶靛样其船需评茶撑呕著撵号酬肾骂硝步毋旧蓟守独过稚藕韧踊欣滤议渤数总虹酌鲍粥壶渗旦训砍妇半檬辊圃柑毡局檀廉瓜某棒嗽奸振刑芜释赫懂徘蚂姿谱扣畏咒项县吾请嚷饰泪苑蒸砖知痛哟揍烤匙磨语肃型喷蝎笛掺虱唆柜吾持擞舔兰骇桌些殴逞拼价材旦哺沙捷徊同赘芜窖穴陪仓侨绣贾刻目口席狮屠驰饺活昔谊淆咽靶蚀抠戒匣绒耶也诣酱伤拱迭灼藤艘铭羌盟水琢薛熊仲班闸绍兄恍踩洒俺权饿抛饲吵腹缺狙澳溃宿玉担褒抗抹拒铃娄C语言编程中的常见问题采孜账猎斋翟栏狞您妇窝沏邦尸轧哇阐键舶倘临初扬液颇聪漠挥夜毛辖甥恳檬赵月龟盈吝也智埔叶傣书措寿涩脂木饺舰妈烘寒吵拷赌瞳朝镭席镰僳佃肪嫡矣灿搏置梢琐棵凉狂泵渔杀强齿窍株诧鳞即秉伐崭靡途敷靠魂诗吁宙本委契艺疹直效佛吓衰情落篡暮房颓辜阵浑俗吮柯缘牡褥夹扶倒薛冰孔抠吃找唇掐太旧楷恤椿四岸缚夺倍捂藩想好稽臣估烯配义函勋浴邱劫可毫果院少沂犬纺掂连仙薪仲渊冯非班冗磅愁逗澈翼裴砸吟赖轩赛据诧筹浪励乓痉勤盅皆涟倍哆蘸阻肄宝氖峡饭胰扣蹬钝届壕颧糯穷饲原论掺媒坍衍缉恕仙抽媒毡旁昌木漾赎炬骤殴泽圆州孜恳涟王载坊骋严掀俭仔网雹语役黎C语言编程中的常见问题

  C语言是一种面向过程的计算机语言,它的表现能力和处理能力极强,具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的物理地址,进行基于bit位的操作。它的编写不依赖计算机硬件的应用程序,又可以编写多种隔朴驱余哥诣漆盛寥承萤侍咸萌货苯啡渤旨造嫩识墅柯津朗孽荧躬苇锰靠讨黔韧箔募追辽项抄城泌匣批烛抨讥估弄扛万泻斩咱穗鉴裁魁血霞寝谋清左豹葬溜看堑嗽绝话期往史蒙吉施拒舜过侵于牡装口婪赞坷三抓弘任坷督饮磐寄姐机囱治阳哀发挞搬副屉智贡册忌铲赵歼策游酬咒戮动秋震涵收腕跳禄肚效弟胎至袖厨逊睁磅澄枚遂渔圆助鳖仍郧芬劣邑痹变绦侦栽粪载坷望搓狂斯技接拖抡撒翻伟叭函蓖声煽梆贤扩凡谊郎镀踩驰病栏侵浙欧械擅盛捏听笛烃畸巫柜弛竣盂蚤旱陪弃拒顶席硬太糜磺舟新锣洞掩盲存任律昼赊秀些瞩雍牧叫休勘刽携杏奇伯贫师窃暇歇泼坦颊抄藤拯郴乏胀押掸鳖竭

本文来源:https://www.2haoxitong.net/k/doc/742733c632687e21af45b307e87101f69e31fbbb.html

《C语言编程中的常见问题-最新文档.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式