c - 如何将已动态分配的字符串复制到另一个已动态分配的字符串?

标签 c strcpy

我在尝试实现自定义 strcpy 函数时遇到问题,该函数应该处理 src 字符串大于目标字符串的情况。这里我提供了一些代码,以便大家可以看到整个功能。我的问题是,每次我增加 *dest 时,它都会进入空地址,尽管我已经分配了足够的内存来容纳所有 src 。这会导致 (双指针)dest = *src 中出现段错误。 dest 存储为 char** 因为实际上,必须传递的参数是另一个可能比 src 更小的字符串,并且我希望尽可能安全地覆盖 *dest。

int customStrCpy(char** dest, char* src){
    int strlen1 = strlen(*dest), strlen2 = strlen(src);
    if(strlen1 < strlen2){
        //Creates a dynamically allocated array that is big enough to    store the contents of line2.
        *dest = calloc(strlen2, sizeof(char));
        char* backup_str = *dest;

        int copy_arrs;
        for(copy_arrs = 0; copy_arrs < strlen2; copy_arrs++){
            **dest = *src;
            *dest++; src++;
        }
        *dest = backup_str;
    }
    else strcpy(*dest, src);
}

最后,(char**)dest 应该指向正确的字符串。

最佳答案

通常strcpy返回char *以便在其他操作中“直接”使用。

char *mysStrCpy(char **dest, const char *src)
{
    size_t len = strlen(src);
    char *tmpptr;

    *dest = malloc(len + 1);
    // or *dest = realloc(*dest, len + 1);
    if(*dest)
    {
        tmpptr = *dest;
        while(*tmpptr++ = *src++);
    }
    return *dest;
}

关于c - 如何将已动态分配的字符串复制到另一个已动态分配的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55855840/

相关文章:

C strcpy 崩溃代码

c++ - strcpy 可以在 Arduino 上编辑内存地址吗?

c - strcpy() 将一个小字符串转换成一个更大的字符串,而其余的较大字符串保持不变。如何处理?

我可以包装 gcc 的原子内置函数吗?

c - 多线程 - 使用线程执行将文件内容存储在 char **array 中的函数?

c - 我在这里做错了什么?数组决定不保留其值

C字符串函数错误

C:关于如何从归档文件中提取文件的理论

c - 为什么编译后的代码在 linux 的 windows 中创建损坏的文件工作正常

c++ - 通过析构函数删除时崩溃