gpt4 book ai didi

c - 在C中复制字符串(包括内存分配、指针等)

转载 作者:行者123 更新时间:2023-11-30 19:36:04 25 4
gpt4 key购买 nike

这是我到目前为止的代码:

char * duplicate(char *str)
{
int len = strlen(str) + 1;
char *ptr;
ptr = (char *)malloc(len);
strcpy(ptr, str);
str = (char *)realloc((void *)str, len * 2 * sizeof(char));
strcat(str, ptr);
free((void *)ptr);
present(str);
return(str);
}

旁注:我知道我应该检查内存是否实际分配,我稍后会这样做。

程序要求用户输入一个字符串,将其加倍并打印出新字符串。我制作的 present->a 函数,以便它将打印出字符串。

现在我的思考过程如下:

1) 分配内存给占位符指针,将str字符串复制到ptr

2) 为 str 重新分配内存,现在大小加倍

3) 使用strcat复制字符串

4) 释放ptr内存

输出应如下:

string input by users for example: "Hi"

output: "HiHi"

如果我们再次运行该函数,输出应为:"HiHiHiHi"

我面临的问题是,运行该函数大约 2-4 次(取决于输入字符串大小)后,程序将崩溃,它会说它有一个触发点和类似以下内容的内容: “wntdll.pdb未加载”。

我相信这与内存有关,因为如果我尝试复制较大的字符串,它会在第一次后崩溃。

我分配内存正确吗?我现在不知道该怎么办。

感谢您的帮助:)

最佳答案

您不需要额外的分配:

char * duplicate(char *str)
{
size_t len = strlen(str);
char *ret = realloc(str, 2*len+1); //assuming no overflow
if(ret){
memcpy(ret+len, ret, len);
ret[2*len]=0;
}
return ret;
}

关于c - 在C中复制字符串(包括内存分配、指针等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41728908/

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