华为C语言面试题中,有哪些是关于经典算法和数据结构的难题?

2026-04-18 20:171阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1223个文字,预计阅读时间需要5分钟。

华为C语言面试题中,有哪些是关于经典算法和数据结构的难题?

在代码中,`string` 数组的大小被声明为10,但字符串`str1`的长度为11(包括结尾的`\0`)。这会导致`strcpy`函数在复制时超出`string`数组的边界,从而可能覆盖内存中的其他数据。正确的做法是使用大小至少为11的数组来存储字符串,以确保有足够的空间容纳整个字符串及其结尾的`\0`。

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的第二个参数应该是一个字符串常量。该函数就是利用判断第二个参数的结束符来得到是否拷贝完毕。

阅读全文

本文共计1223个文字,预计阅读时间需要5分钟。

华为C语言面试题中,有哪些是关于经典算法和数据结构的难题?

在代码中,`string` 数组的大小被声明为10,但字符串`str1`的长度为11(包括结尾的`\0`)。这会导致`strcpy`函数在复制时超出`string`数组的边界,从而可能覆盖内存中的其他数据。正确的做法是使用大小至少为11的数组来存储字符串,以确保有足够的空间容纳整个字符串及其结尾的`\0`。

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的第二个参数应该是一个字符串常量。该函数就是利用判断第二个参数的结束符来得到是否拷贝完毕。

阅读全文