c/c++补完计划(二-改): c字符串复制

时间:2022-07-22
本文章向大家介绍c/c++补完计划(二-改): c字符串复制,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

前言

c字符串复制的实现, 基本参考strcpy源码. 在和百度面试官一番攀谈交心之后, 了解到之前的写法, 会有很多问题.

正文

void strCopy(char *dest, const char *str, int len) {
    if (str == nullptr) {
        return;
    }

    int strLen = strlen(str);
    int minLen = min(strLen, len - 1);

    dest[minLen] = '';
    for (int i = 0; i < minLen; ++i) {
        dest[i] = str[i];
    }
}

int main() {
    char *str = "hello, world";
    int len = strlen(str);
    char *ret = (char *) malloc(sizeof(char) * (len + 1));
    memset(ret, 0, sizeof(char) * (len + 1));

    strCopy(ret, str, len + 1);
    cout << ret << endl;
    return 0;
}

首先申请空间应该放权给用户, 不应该内置在函数中. 再者, 用户不一定甚至刚好的空间, 可以考虑让他传入申请空间的长度, 然后通过比对字符串长度和申请空间长度, 选择小的进行字符串复制. 说实话, 我以为的满分答案, 在面试官眼中真的问题百出, 自己还是不断学习.