服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言大厂面试技巧及strcpy()函数示例详解

C语言大厂面试技巧及strcpy()函数示例详解

2022-03-02 15:02鹿九丸 C/C++

这篇文章主要为大家介绍了C语言面试技巧,以strcpy()函数为示例进行分析详解,有需要冲刺大厂的朋友们可以借鉴参考下,希望能够有所帮助

1、什么是优秀的代码?

1. 代码运行正常

2. bug很少

3. 效率高

4. 可读性高

5. 可维护性高

6. 注释清晰

7. 文档齐全

 

2、常见的coding技巧有哪些?

1. 使用assert

2. 尽量使用const

3. 养成良好的编码风格

4. 添加必要的注释

5. 避免编码的陷阱。

 

3、以模拟实现strcpy为例

(1)了解strcpy()函数

C语言大厂面试技巧及strcpy()函数示例详解

作用:将源字符串里的字符拷贝到目标字符串中去。

注意:字符串的结束标志'\0'也会拷贝过去。

证明如下:

C语言大厂面试技巧及strcpy()函数示例详解

(2)正片开始(危)

1.第一阶段(面试官:最多5分)

#include<stdio.h>
void my_strcpy(char* dest, char* src)
{
	while (*src!='\0')
	{
		*dest = *src;
		dest++;
		src++;
	}
	*dest = *src;//处理字符串的结束标志'\0'
	//*dest = '\0';这样处理并非是不行,但是会给阅读代码的造成一种错觉\
	即这个'\0'是自己放进去的,而不是从源字符串拷贝进去的
}
int main()
{
	char arr1[20] = { 0 };
	char arr2[] = "hello";

 my_strcpy(arr1, arr2);
	printf("%s\n", arr1);
	return 0;
}

缺点:如果传的实参是空指针,就会出现问题,因为空指针是无法进行解引用的。

解决方法:使用assert()进行断言,()里面放的是表达式。使用assert需要引用头文件<assert.h>。

说明:assert(),括号中的表达式如果不满足,编译器就会报错。

2.第二阶段(面试官:最多7分)

#include<stdio.h>
#include<assert.h>
void my_strcpy(char* dest, char* src)
{
	assert(dest != NULL);
	assert(src != NULL);
 //当然,此处也可以将两个合并成一个:assert( dest && src )
	while (*src!='\0')
	{
		*dest = *src;
		dest++;
		src++;
	}
	*dest = *src;
}
int main()
{
	char arr1[20] = { 0 };
	char arr2[] = "hello";

 my_strcpy(arr1, arr2);
	printf("%s\n", arr1);
	return 0;
}

下面是图片演示,加入传入一个空指针就会出现下面的报错。

C语言大厂面试技巧及strcpy()函数示例详解

3.第三阶段的代码:(面试官:最多8分)

#include<stdio.h>
#include<assert.h>
void my_strcpy(char* dest, char* src)
{
	assert( dest && src );
	while(*dest++ = *src++)//'\0'的ascii码值为0,为假,会退出循环
	{
		;
	}
}
int main()
{
	char arr1[20] = { 0 };
	char arr2[] = "hello";
 my_strcpy(arr1, arr2);
	printf("%s\n", arr1);
	return 0;
}

4.第四阶段(面试官:完美代码!10分!)

通过对比发现,与库函数中的函数还相差一个const,以及返回类型不同。

C语言大厂面试技巧及strcpy()函数示例详解

#include<stdio.h>
#include<assert.h>
char * my_strcpy(char* dest, const char* src)
//const可以防止源字符串被改变
{
	assert( dest && src );
	char* ret = dest;
	while(*dest++ = *src++)
	{
		;
	}
	return ret;
}
int main()
{
	char arr1[20] = { 0 };
	char arr2[] = "hello";

	printf("%s\n", my_strcpy(arr1, arr2));
	return 0;
}

以上就是C语言面试技巧及strcpy()函数示例详解的详细内容,更多关于C语言面试技巧及strcpy()函数的资料请关注服务器之家其它相关文章!

原文链接:https://blog.csdn.net/m0_57304511/article/details/121503898

延伸 · 阅读

精彩推荐