gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:10:45 25 4
gpt4 key购买 nike

我在尝试实现自定义 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com