gpt4 book ai didi

c - strcat 用于动态字符指针

转载 作者:行者123 更新时间:2023-11-30 20:56:37 24 4
gpt4 key购买 nike

我需要用 C 语言编写一个 strcat。我尝试了以下操作:

 char * c_strcat( char * str1, const char * str2)
{

char * ret = (char *) malloc(1 + strlen(str1)+ strlen(str2) );

if(ret!=NULL)
{
strcpy(ret, str1);
strcat(ret, str2);

if(str1 !=NULL) free str1; // If I comment this everything will be fine
return ret;
}

return NULL;
}


int main()
{

char * first = "Testone";
char *second = "appendedfromhere";

first = c_strcat(first,second);
if(second !=NULL) free(second);

// I want to store the result in the same variable

}

每当我在 c_strcat 函数中释放 str1 内存时,它就会崩溃。如果我不释放,那么为第一个分配的内存将被泄漏(如果我理解正确的话)。

如何将返回值存储到同一变量(首先)?

最佳答案

摘自 C99 标准的7.20.3.2 自由函数部分:

The free function causes the space pointed to by ptr to be deallocated, that is, made available for further allocation. If ptr is a null pointer, no action occurs. Otherwise, if the argument does not match a pointer earlier returned by the calloc, malloc, or realloc function, or if the space has been deallocated by a call to free or realloc, the behavior is undefined.

str1 (又名 first )由三个动态内存分配函数之一分配,从而导致崩溃。 second 相同还有。

if don't free then the memory allocated for the first will be leaked(if am understood properly).

如果malloc(),内存将会泄漏, realloc()calloc()已使用且内存未 free() d 稍后。作为字符串文字 "Testone"不是动态分配的,不得释放。

注意指针NULL调用之前检查free()不需要,如 free()如上所述,如果指针参数为 NULL,则不执行任何操作。 .

<小时/>

Do I cast the result of malloc?

关于c - strcat 用于动态字符指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23518414/

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