这是我到目前为止的代码:
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/