微信搜索“编程笔记本”,获取更多信息
------------- codingbook2020 -------------
今天继续分享面经:360 软件开发,提前批。
面试题
文章目录
1. 实现 strcpy() ?
string.h
中的 strcpy()
的函数原型如下:
char *strcpy(char* dest, const char *src);
这个函数的功能是:把从 src 地址开始且含有 ‘\0’ 结束符的字符串复制到以 dest 开始的地址空间。
我们的实现:
char *strcpy(char* dest, const char *src)
{
assert(dest != NULL && src != NULL);
char *ret = dest;
do {
*dest = *src;
} while (*src++ != '\0') {
return ret;
}
实现的时候有几个地方需要注意一下:
- 源串的参数类型为 const ,保证函数不会修改源串
- 使用 assert 进行指针有效性检查
- 保存目的串的起始地址并返回
2. 如何判断大、小端字节序,写出代码?
字节序的问题是由于 CPU 对整数在内存中存放方式的不同而造成的。多于一个字节的数据类型在内存中的存放顺序叫主机字节序。最常见的字节序有两种,小端字节序和大端字节序。
- 小端字节序
即 Little Endian ,简称 LE ,将数据的最低字节放在内存的起始位置。小端字节序的特点是内存地址较低的位存放数据的低位,内存地址高的位存放数据的高位,与思维习惯一致。采用小端字节序的 CPU 有 X86 架构的 Intel 系列产品 - 大端字节序
即 Big Endian ,简称 BE ,将数据的高字节放在内存的起始位置。大端字节序的特点是内存中低字节位置存放数据的高位字节,内存中的高位字节存放数据的较低字节数据,与思维习惯不一致。但是与实际数据的表达方式是一致的。如果将内存中的数据直接存放在文件中,打开文件查看会发现和原来的数据的高低位一致。采用大端字节序的典型代表有 PowerPC 的 UNIX 系统。
下面我们通过一个简单的例子来获取笔者所使用主机的字节序:
#include <stdio.h>
union Test {
short numb;
char c[2];
};
int main()
{
printf("sizeof(short) = %d\n", sizeof(short));
printf("sizeof(char) = %d\n", sizeof(char));
un