- 1、本文档共29页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3.main主函数执行完毕后,是否可能会再执行一段代码?朗讯的一道笔试题答案:可以,可以用_onexit 注册一个函数,它会在main 之后执行如果你需要加入一段在main退出后执行的代码,可以使用atexit()函数,注册一个函数。 ? ? 语法: ? ? #include ? stdlib.h ? ? int ? atexit(void ? (*function)(void)); ? ? #include ? stdlib.h ? ? #include ? stdio.h ? ? ? void ? fn1( ? void ? ), ? fn2( ? void ? ), ? fn3( ? void ? ), ? fn4( ? void ? ); ? ? ? int ? main( ? void ? ) ? ? { ? ? ? ? ? atexit( ? fn1 ? ); ? ? ? ? ? atexit( ? fn2 ? ); ? ? ? ? ? atexit( ? fn3 ? ); ? ? ? ? ? atexit( ? fn4 ? ); ? ? ? ? ? printf( ? This ? is ? executed ? first.\n ? ); ? ? } ? ? void ? fn1() ? ? { ? ? ? ? ? printf( ? next.\n ? ); ? ? } ? ? void ? fn2() ? ? { ? ? ? ? ? printf( ? executed ? ? ); ? ? } ? ? ? void ? fn3() ? ? { ? ? ? ? ? printf( ? is ? ? ); ? ? } ? ? ? void ? fn4() ? ? { ? ? ? ? ? printf( ? This ? ? ); ? ? } ?
结果:This ? is ? executed ? first. ? ?This ? is ? executed ? next. ?
8.完成字符串拷贝可以使用 sprintf、strcpy 及 memcpy 函数,请问这些函数有什么区别
,你喜欢使用哪个,为什么?这些函数的区别在于 实现功能 以及 操作对象 不同。strcpy 函数操作的对象是 字符串,完成 从 源字符串 到 目的字符串 的 拷贝 功能。snprintf 函数操作的对象不限于字符串:虽然目的对象是字符串,但是源对象可以是字符串、也可以是任意基本类型的数据。这个函数主要用来实现(字符串或基本数据类型)向字符串的转换功能。如果源对象是字符串,并且指定 %s 格式符,也可实现字符串拷贝功能。memcpy 函数顾名思义就是 内存拷贝,实现 将一个 内存块 的内容复制到另一个 内存块 这一功能。内存块由其首地址以及长度确定。程序中出现的实体对象,不论是什么类型,其最终表现就是在内存中占据一席之地(一个内存区间或块)。因此,memcpy 的操作对象不局限于某一类数据类型,或者说可 适用于任意数据类型,只要能给出对象的起始地址和内存长度信息、并且对象具有可操作性即可。鉴于 memcpy 函数等长拷贝的特点以及数据类型代表的物理意义,memcpy 函数通常限于同种类型数据或对象之间的拷贝,其中当然也包括字符串拷贝以及基本数据类型的拷贝。对于字符串拷贝来说,用上述三个函数都可以实现,但是其实现的效率和使用的方便程度不同:
strcpy 无疑是最合适的选择:效率高且调用方便。
snprintf 要额外指定格式符并且进行格式转化,麻烦且效率不高。
memcpy 虽然高效,但是需要额外提供拷贝的内存长度这一参数,易错且使用不便;并且如果长度指定过大的话(最优长度是源字符串长度 + 1),还会带来性能的下降。其实 strcpy 函数一般是在内部调用 memcpy 函数或者用汇编直接实现的,以达到高效的目的。因此,使用 memcpy 和 strcpy 拷贝字符串在性能上应该没有什么大的差别。对于非字符串类型的数据的复制来说,strcpy 和 snprintf 一般就无能为力了,可是对 memcpy 却没有什么影响。但是,对于基本数据类型来说,尽管可以用 memcpy 进行拷贝,由于有赋值运算符可以方便且高效地进行同种或兼容类型的数据之间的拷贝,所以这种情况下 memcpy 几乎不被使用。memcpy 的长处是用来实现(通常是内部实现居多)对结构或者数组的拷贝,其目的是或者高效,或者使用方便,甚或两者兼有。9.变量的声明和定义有什么区别?
10.请写出下面代码在 32 位平台上的运行结果,并说明 sizeof 的性质:
#include stdi
文档评论(0)