面试常问的库函数有哪些?程序员必看
找工作面试时,尤其是技术岗,经常会被问到一些常见的库函数。别小看这些基础问题,它们往往是考察你对语言掌握程度的试金石。比如你在写C语言程序时用了strcpy,面试官突然问你:这个函数有啥风险?你能答上来吗?
strlen 和 sizeof 的区别
这个问题几乎成了标配。很多人以为它们差不多,其实差别挺大。strlen是计算字符串长度,不包含末尾的\0;而sizeof是算整个变量占多少字节。
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "hello";
printf("strlen(str) = %d\n", strlen(str)); // 输出 5
printf("sizeof(str) = %d\n", sizeof(str)); // 输出 6(包括\0)
return 0;
}strcpy 和 strncpy 的安全隐患
面试官特别喜欢拿strcpy说事,因为它不会检查目标缓冲区大小,容易造成缓冲区溢出。这也是很多安全漏洞的根源。
这时候你可以提一下strncpy,它多了一个长度参数,相对安全些,但要注意它不一定自动加\0。
char dest[10];
strcpy(dest, "hello world"); // 危险!超出dest容量atoi 和 strtol 哪个更好用?
把字符串转成整数,很多人第一反应就是atoi。但它遇到非法字符直接返回0,没法判断到底是转换失败还是原本就是0。
strtol就更靠谱,它能通过指针返回出错位置,适合做健壮性处理。
malloc 和 free 要成对出现
动态内存管理是重点。面试官可能会让你写一段分配内存再释放的代码。记住一点:每次 malloc 都要对应一个 free,否则就是内存泄漏。
顺便提一句,calloc 和 malloc 的区别在于前者会把内存初始化为0,适合数组类场景。
strcmp 和 strncmp 的使用场景
比较字符串内容,用strcmp没问题。但如果只想比前几个字符,比如判断文件扩展名是不是“.txt”,那就该用strncmp,避免越界或误判。
if (strncmp(filename + len - 4, ".txt", 4) == 0) {
printf("这是一个txt文件\n");
}这类细节,在实际项目里很实用,面试官一听就知道你有没有真写过代码。
memcpy 和 memmove 能互换吗?
两个都用来拷贝内存,但关键区别在于是否处理内存重叠。memcpy不保证处理重叠区域,而memmove可以,因为它内部做了判断。
如果你在面试中提到这点,说明你看过底层逻辑,不是死记硬背。