作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在尝试实现自定义 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/
我是一名优秀的程序员,十分优秀!