美文网首页
c/c++补完计划(二-改): c字符串复制

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

作者: sean_depp | 来源:发表于2020-07-23 23:20 被阅读0次

前言

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] = '\0';
    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;
}

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

相关文章

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

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

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

    前言 c字符串复制的实现, 基本参考strcpy源码. 正文 不同于strcpy的点在于, 传入只有src串, 没...

  • c/c++补完计划(七): 哨兵节点

    前言 解决链表问题, 经常会用一个空的节点进行辅助. 合并两个排序的链表 可以先考虑递归, 新建一个节点, 然后选...

  • c/c++补完计划(三): 素数统计

    前言 统计所有小于非负整数 n 的质数的数量这是一道leetcode简单级别的, 本来没啥说的, 然后我发现了欧拉...

  • c++传递字符串给c#使用问题

    C++里,字符串要占用内存的。C++创建字符串,并传给C#,就会造成内存泄露(因为C#不知道C++如何创建,也就不...

  • C_C++ 字符串数字的转换

    C++ 字符串流 stringstream C++ stream library 中的 stringstream ...

  • C++<第十九篇>:字符串

    C++ 中的字符串有两种形式:(1)C风格的字符串 (2)C++引入的 string 类型的字符串。 (1)C风格...

  • C++面试题-编程

    1、不调用C++/C的字符串库函数,编写strcpy函数 上述strcpy能够把psrc的内容复制给pdest,为...

  • C++ 字符串

    C++ 提供了以下两种类型的字符串表示形式: C 风格字符串 C++ 引入的 string 类类型 1、C 风格字...

  • 字符串

    C++提供了两种字符串的表示形式: C风格字符 C++引入的string类型 C风格 函数 C++中的String类

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/ougklktx.html