C语言学习之12个小问答

  1、gets() 方法

  问:以下代码有个被隐藏住的问题,你能找到它吗?


  答:这个不显眼的问题就是使用了 gets() 方法。此方法接受一个string类型参数,但是却没有检测此数值是否 有足够的空间来拷贝数据。所以这里我们一般用 fgets() 方法将来的更好。

  2、strcpy() 方法

  问:密码防护是很基本的功能,看看能否搞定下面这段代码?


  3、main() 方法的返回类型

  问:请问下面这段代码能否通过编译?如果能的话,那么这段代码中隐含什么问题吗?


  答:答案是代码能通过编译,但是会留下针对main()方法的返回类型的警告。main()方法的真正返回类型应该为'int'而非'void'。这是因为'int'返回类型能够让程序返回状态值。尤其是当这段程序作为其他应用的附属程序时这个状态值将更加重要。

  4、内存泄露

  问:请问以下代码有内存泄露吗?


  答:虽然上面的代码没有对指针 ptr 进行内存释放,但实际上即使是程序结束也不会造成内存泄露,因为当程序结束时所有一开始被占据的内存就全部清空了。但如果上面这段代码是在 while 循环里面那将会造成严重的问题。

  5、free() 方法

  问:以下代码当用户输入'freeze'时会奔溃,而如果输入'zebra'则运行正常,这是为什么?


  答:问题的根源是因为代码在while循环中改变了 ptr 指针的地址。当输入为'zebra'时,while循环甚至在执行 第一遍前就结束了,所以free()释放的内存地址就是一开始malloc()分配的地址。但是当输入'freeze'时, ptr记录的地址在while循环中被更改,因为将会是错误的地址传递到free()方法中引起崩溃。

  6、atexit with _exit

  问:在以下代码,atexit()方法并没有被调用,你知道为什么吗?


  答:这是因为使用了 _exit() 方法。此方法并没有调用清除数据相关的方法,比如 atexit()等。

  7、void* 与 C 结构体

  问:能否设计一个方法接受任意类型的参数然后返回整数?同时是否有办法传递多个这样的参数?

  答:一个能接受任意类型参数的方法像下面这个样子:


  如果需要传递多个参数,那么我们可以传递一个包含这些参数的结构体

  8、* 与 ++ 操作符

  问:以下代码将输出什么?为什么?


  答:以上的输出将是:


  因为++与 * 的优先级一样,所以 *ptr++ 将会从右向左操作。按照这个逻辑,ptr++ 会先执行然后执行*ptr。所以第一个结果是'L'。也因为 ++ 被执行了,所以下一个printf() 结果是'i'。

  9、Making changes in Code segment

  问:以下代码运行时一定会崩溃,你能说出原因吗?


  答:这是因为,通过 *ptr = 'T',此行代码尝试更改只读内存存储的字符串'Linux'。此操作当然行不通所以才会造成崩溃。

  10、Process that changes its own name

  问:你能否写一个程序在它运行时修改它的名称?

  答:以下代码可以完成


  11、局部变量的返回地址

  问:下面的代码有问题吗?如果有,如何修改?


  答:虽然上面的代码有时运行会很好,但是在方法 inc() 中有很严重的隐患。当inc()方法执行后,再次使用局部变量的地址就会造成不可估量的结果。解决之道就是传递变量a的地址给main()。

  12、处理 printf() 参数

  问:以下代码输出请问是什么?


  答:输出将是


  这是因为参数都是从右向左处理的,然后打印出来却是从左向右。

时间: 2024-10-28 04:09:32

C语言学习之12个小问答的相关文章

语言学习神器Duolingo使用教程

多灵狗(Duolingo)是一个基于多灵狗语言学习网站的 iOS 应用.多灵狗网站除了提供免费的语言课程,还提供收费的翻译服务,具体的在这里就不介绍了.这个应用于2012年11月13日上架,目前已经在美区积攒了过万的五星评价.App Store 上的语言学习软件很扎堆,能得到这样评价的,凤毛麟角.只需在软件内注册以后,用户免费进行互动式的语言学习了.目前提供的语言还比较少,而且国人学习的话,必须以英文为基础.多灵狗有加入中文的想法,但兔纸估计,基于中西方语言系统的迥异,这个时间应该会在比较久远的

路易斯•冯•安打算利用语言学习平台改变生活

12年前,路易斯•冯•安(Luis von Ahn)用验证码(CAPTHCA)改变了整个互联网:12年后,他打算利用语言学习平台Duolingo改变更多人的生活. 路易斯今年34岁,毕业于美国卡内基梅隆大学.早在2002年,他和导师一起发明了验证码,极大打击了垃圾邮件和恶意注册行为:随后,他又启动了reCAPTHCA项目,希望通过验证码推动古籍.过刊的电子化:如今,他把所有精力投入到了Duolingo中. Duolingo(中文译名为"多邻国")是一个"寓教于乐"的

Go语言学习资料整理

整理网上找到的Golang语言学习资料 基础 基础教程 书籍在线版 Go 指南-A Tour of Go Go语言圣经(中文版) Effective Go中文版 Go Web编程 build-web-application-with-golang Go入门指南 The Way to Go <The Way to Go>中文译本,中文正式名<Go入门指南> Golang学习室 Go轻松学 TechDoc <Go实战开发> go-best-practice 基础教程 书籍离

jquery操作复选框的12个小技巧总结

 本篇文章主要是对jquery操作复选框(checkbox)的12个小技巧进行了总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助 1.获取单个checkbox选中项(三种写法) $("input:checkbox:checked").val() 或者 $("input:[type='checkbox']:checked").val(); 或者 $("input:[name='ck']:checked").val();   2. 获取多个ch

Unix和Linux下C语言学习指南

尽管 C 语言问世已近 30 年,但它的魅力仍未减退.C 语言继续吸引着众多的开发者,他们为了编写.移植或维护应用程序而必须学习新技能. 本文是为了满足对C语言初学者或想提高自身C语言修为的开发人员的需要而写的.希望对您的学习和工作有所帮助.您也许不赞同其中的某些方法,但我们希望您会喜欢其中的一些. 本文不介绍作为一个程序员应掌握得语言细节,而是与初学者分享自己的UNIX 下C语言编程学习经验;也不说明一个合格的编程人员应该掌握的计算机知识,比如:操作系统.数据结构与算法.数据库等等. 不管您出

给Mac提速的12条小贴士

  随着使用时间的增加,电子设备的运行速度总是会越来越慢,这几乎是无可避免的,苹果的Mac系列计算机自然也不能幸免.不过所幸的是,一些小技巧可以在一定程度上恢复Mac的速度.如果你购买的Mac开始变慢,不妨尝试一下下面这12条小贴士. 1.检查系统升级 设备运行速度的变慢可能是因为系统本身的bug或缺陷,而系统升级则可以对这些问题进行修复,所以用户应该定期检查是否有新的升级可用.想要查看系统升级,你需要点击屏幕左上角的苹果图标,然后从下拉菜单当中选择软件升级.在大多数情况下,你的Mac应该会在新

刚开始学习spring 有一点小问题 希望能得到高手解答

问题描述 刚开始学习spring 有一点小问题 希望能得到高手解答 ?下面这几段代码中有一个地方不是很理解,希望能得到指点 UserServiceTest.java @Test public void testAdd() throws Exception { ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); UserService service = (UserService)ctx.ge

java 编程-java语言求助,遇到个小问题

问题描述 java语言求助,遇到个小问题 始终提示非法字符,不知道哪里错了,各位精英帮帮忙.好像是引号的问题,大家帮忙看看. 解决方案 检查一下是不是半角与全角的原因 解决方案二: 找到提示出错的行,看看那一行都有什么符号.也可以复制贴出来才好分析. 解决方案三: 编写代码时把输入法设置成英文输入法,如果你的代码不多的话,删除重新写试试. 解决方案四: 一般编译器会把有语法错误的地方标注

c语言函数-c语言学习求助大神:i函数问题

问题描述 c语言学习求助大神:i函数问题 编写函数,根据整型形参n的值,计算以下公式. T=1-1/(2*2)-1/(3*3)-1(4*4)---1(m*m) 例如,若m=5,T=0.536389 解决方案 double t = 1; for (int i =2; i <=m; i++) { t = t - 1 / (double)(m * m); } printf("%lf", t); 解决方案二: 这是个级数问题,当n值较大时,不能使用常规方法来求,这样精度不够,建议使用级数