华为经典C语言面试题(一)

编程入门 行业动态 更新时间:2024-10-24 07:21:50

<a href=https://www.elefans.com/category/jswz/34/1769368.html style=华为经典C语言面试题(一)"/>

华为经典C语言面试题(一)

 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语言面试题(一)

本文发布于:2024-02-08 20:38:45,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1674797.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:华为   面试题   语言   经典

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!