七月初的时候面试了本地的一家芯片公司,虽然没进去但是收获良多,整体感受芯片行业面试,无论是笔试题还是面试题问的都比较偏底层。面试里面C语言试题有几道题是关于内存操作的,当时答得不太好,这里回忆一下,写一个测试代码,验证下
(PS:其实相对于题目而言,面试官更看重的的是你对自己项目了解得是否透彻,遇到问题是怎么解决的,所以功夫要下在平时,注意对自己分析问题,解决问题能力的培养,遇到问题一定要深究,找到根本原因,这才是核心竞争力)
strcpy(p,str)
代码一:不给p动态申请内存
解析:p是一个指针,当不给它申请内存时,使用strcpy给它赋值,运行结果是段错误。
代码二:给p申请内存空间
解析:当我定义指针p时,使用malloc动态申请20个字节的内存,再使用strcpy给它赋值,打印出字符串“hello”,程序运行没问题
strcat(p,str)
代码一:不给p动态申请内存
解析:使用strcat,不给p申请内存,也是段错误
代码二:给p申请内存空间
解析:使用strcat,给p申请内存,木有问题
结论同上
strcmp
代码一:不给p动态申请内存
代码二:给p申请内存
解析,num值为负,即p指向的空间存储的数据“小于”str,运行没问题
sprintf(p,str)
这个肯定是不申请内存,段错误
代码一:不申请内存
代码二:给p申请内存
总结
当使用上述函数时,如果第一个参数是一个指针(不是数组形式),则必须要动态申请一定的内存空间,不然会报段错误。