华为经典C语言面试题(一)
来源:互联网 发布:网络分销代理 编辑:程序博客网 时间:2024/05/22 00:48
1、找错
void test1()
{
char string[10];
char* str1="0123456789";
strcpy(string, str1);
}
这里string数组越界,因为字符串长度为10,还有一个结束符‘\0’。所以总共有11个字符长度。string数组大小为10,这里越界了。
PS:使用strcpy函数的时候一定要注意前面目的数组的大小一定要大于后面字符串的大小,否则便是访问越界。
void test2()
{
char string[10], str1[10];
for(i=0; i<10;i++)
{
str1[i] =’a’;
}
strcpy(string, str1);
}
这里有一个一眼就能看出的问题,那就是变量i没有定义,这在代码编译阶段编译器可以帮你发现,很容易搞定。然而很多问题是自己造成的漏洞,编译器是帮不上什么忙的。这里最大的问题还是str1没有结束符,因为strcpy的第二个参数应该是一个字符串常量。该函数就是利用判断第二个参数的结束符来得到是否拷贝完毕。所以在for循环后面应加上str1p[9] = ‘\0’;
PS:字符数组和字符串的最明显的区别就是字符串会被默认的加上结束符‘\0’。
void test3(char* str1)
{
char string[10];
if(strlen(str1)<=10)
{
strcpy(string, str1);
}
}
这里的问题仍是越界问题。strlen函数得到字符串除结束符外的长度。如果这里是<=10话,就很明显越界了。
小结:上面的三个找错的函数,主要是考查对字符串和字符数组的概念的掌握以及对strcpy函数和strlen函数的理解。
- 华为经典C语言面试题(一)
- 华为经典C语言面试题(一)
- 重解几道华为经典C语言面试题
- 华为经典C语言面试题
- 重解几道华为经典C语言面试题
- 重解几道华为经典C语言面试题
- 重解几道华为经典C语言面试题
- 华为C语言经典面试题
- 华为C语言经典面试题
- 华为经典C语言面试题(二)
- 华为C语言面试题
- 华为C语言面试题
- 华为C语言面试题
- 华为C语言面试题
- 华为C语言面试题
- C语言面试题一——华为篇
- C语言面试题一——华为篇
- C语言面试题-华为C语言面试题
- mysql事务隔离性
- Hadoop HDFS 运行原理
- 集合
- CDN(静态独立)
- 加载
- 华为经典C语言面试题(一)
- Java需要掌握的常用类库
- axure_a1_带提示文字的输入框
- 《tensorflow实战google》第二章代码
- JBoss多实例端口冲突问题
- 常去的博客列表
- Redis入门知识
- 正则表达式
- React、Redux、React-Redux的一些理解