MST

星途 面试题库

面试题:C语言字符串处理函数的实现与优化

请手动实现一个C语言的strcpy函数,用于将一个字符串复制到另一个字符串中。要求考虑源字符串和目标字符串可能存在内存重叠的情况(即目标字符串的一部分或全部位于源字符串的范围内),并且在实现过程中要确保代码的健壮性和效率。实现后,请简要说明你采取了哪些措施来优化性能和避免潜在的错误。
37.3万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>
#include <assert.h>

char* myStrcpy(char* dest, const char* src) {
    assert(dest != NULL && src != NULL);
    char* ret = dest;
    if (dest < src || dest >= src + strlen(src)) {
        while ((*dest++ = *src++) != '\0');
    } else {
        char* lastSrc = (char*)src + strlen(src) - 1;
        char* lastDest = dest + strlen(src) - 1;
        while (lastSrc >= src) {
            *lastDest-- = *lastSrc--;
        }
    }
    return ret;
}

性能优化和错误避免措施:

  1. 健壮性方面
    • 使用assert确保传入的destsrc指针不为空,避免空指针引用导致的未定义行为。
  2. 性能优化方面
    • 正向复制:当目标字符串在源字符串之前,或者目标字符串完全在源字符串之后时,采用正向复制,这是通常情况下的高效方式,减少了指针移动的复杂性。
    • 反向复制:当目标字符串部分或全部位于源字符串范围内时,采用反向复制,从字符串末尾开始复制,避免覆盖还未复制的源字符串内容。这样可以正确处理内存重叠的情况,同时在这种情况下也保证了效率。