·天新网首页·加入收藏·设为首页·网站导航
数码笔记本手机摄像机相机MP3MP4GPS
硬件台式机网络服务器主板CPU硬盘显卡
办公投影打印传真
家电电视影院空调
游戏网游单机动漫
汽车新车购车试驾
下载驱动源码
学院开发设计
考试公务员高考考研
业界互联网通信探索
您现在的位置:天新网 > 软件开发 > 开发语言 > C/C++
C语言学习之12个小问答
http://www.21tx.com 2012年09月11日

1 2 下一页

1、gets() 方法

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

C语言学习之12个小问答

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

  2、strcpy() 方法

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

C语言学习之12个小问答

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

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

C语言学习之12个小问答

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

  4、内存泄露

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

C语言学习之12个小问答

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

  5、free() 方法

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

C语言学习之12个小问答

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

  6、atexit with _exit

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

C语言学习之12个小问答

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

  7、void* 与 C 结构体

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

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

C语言学习之12个小问答

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

  8、* 与 ++ 操作符

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

C语言学习之12个小问答

  答:以上的输出将是:

C语言学习之12个小问答

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

  9、Making changes in Code segment

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

C语言学习之12个小问答

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

上一篇: 为什么不使用 Go 语言呢?
下一篇: C++ 并发编程的一种思维

1 2 下一页

关于我们 | 联系我们 | 加入我们 | 广告服务 | 投诉意见 | 网站导航
Copyright © 2000-2011 21tx.com, All Rights Reserved.
晨新科技 版权所有 Created by TXSite.net