C++常见面试题(一)——关于字符、字符数组、assert()
来源:互联网 发布:淘宝韩版男装店铺 编辑:程序博客网 时间:2024/06/01 08:33
今天在牛客网上看招聘,选择“研发工程师(C/C++方向)”,列出了基础知识体系及结构,包含C/C++、网络基础、操作系统、linux、数据库、数据结构。我的天呐,包含的内容体系这么多,这可不是两三个月突击就可以搞定的!好好加油吧孩子~
好,今天先看几道题目吧。
1、分析下面代码有问题
void test1(){ char string[10]; char* str1 = "0123456789"; strcpy( string, str1 );}分析:显然有问题。编译器在编译字符串时,会自动在每个字符串的结尾处加上一个空字符(‘\0’),所以,str1指向的是11个元素,而字符数组里面只有10个空间,显然不能拷贝。这里补充说明一点,字符 ‘A’,就是个单独的字符 A,而字符串 “A”包含两个字符,一个是字母A,另一个是\0;
2、分析下面代码的问题
void test2(){ char string[10], str1[10]; int i; for(i=0; i<10; i++) { str1 = 'a'; }strcpy( string, str1 );}分析:显然有问题。str1= 'a'; 根本编译不过去。数组名都是 char * const类型的,为右值,不允许赋值。同理,str1++也是不允许的。此外,还存在一个安全隐患,strcpy f复制的时候,如果不能遇到’\0‘,就一直复制下去,所以,很容易导致数组越界。
完美的改法如下:
void main(){ char string[10], str1[10]; int i; for(i=0; i<9; i++) { str1[i] = 'a'; } str1[9] = '\0'; strcpy( string, str1 );}3、指出代码错误
void test3(char* str1){ if(str1 == NULL){ return ; } char string[10]; if( strlen( str1 ) <= 10 ) { strcpy( string, str1 ); }}分析:因为string 数组大小为10,如果 str 长度为10了,加上一个 ’\0‘,就变成11个了
4、写出完整版的 strcpy( )函数
看到下面的答案,感觉自己弱爆了。
断言assert( )不是函数,而是宏。它是在头文件 <assert.h>里面的。如果它的条件返回错误,那么,程序终止执行。
阅读全文
3 0
- C++常见面试题(一)——关于字符、字符数组、assert()
- C/C++常见笔试面试题(三)——字符数组做形参、内存申请与释放、宏
- c语言常见面试题(一)
- c/c++常见面试题(一)
- C常见面试题<一>
- C/C++面试题(4)——统计输入字符串中字符的频度
- 常见面试题系列1——原地消除字符串连续的空白字符
- C语言(关于字符数组)
- c——字符数组
- [ 面试题 ] 常见面试题 (一)
- 字符数组(一)
- Java面试题:统计字符中最多的字符(map集合解法 方法一)
- 常见面试题(一)
- 常见面试题(一)
- C语言--一维数组,字符数组
- C/C++ 常见面试题(一)
- 【C++】字符串——字符数组和字符指针浅谈
- 常见数组面试题
- declare 简单用法
- Jmeter性能测试 入门
- list集合去除重复对象的实现
- 一个广为流传其实问题多多的古典问题
- 无旋Treap
- C++常见面试题(一)——关于字符、字符数组、assert()
- mac 安装QT5.9.1 MYSQL
- 链表常见面试题-C语言实现
- android网络框架
- Oracle的merge into
- Java ==与equals方法有什么区别
- 快速排序
- 管理者的无用功:靠加班、靠团建、靠个人
- netwatch详解,RouterOS-IP检测并执行对应脚本