gpt4 book ai didi

c - 简单 strcat() 包装函数的段错误

转载 作者:行者123 更新时间:2023-12-04 06:08:40 25 4
gpt4 key购买 nike

我有一个练习,我需要为 strcat 编写一个包装函数。在它打印字符串长度(用于调试)之后,它会出现段错误,我不太确定为什么。任何帮助将不胜感激。

编辑:我没有指定包装函数应该保证它永远不会超出为目标分配的内存范围。这就是为什么我只为目标中的“字符串”分配了足够的内存,并在 Strcat() 包装器中重新分配了更多内存。

    #include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* Strcat(char* destination, const char* source);

int main(void)
{
(void)printf("This strcat cannot fail!\n");
char* destination = (char*)malloc(sizeof(char)*7);
destination = "string";
(void)printf("%s\n", destination);
Strcat(destination, " concatination");
(void)printf("%s\n", destination);
(void)printf("It works!\n");

free(destination);

return 0;
}

char* Strcat(char* destination, const char* source)
{
(void)printf("%d\n", (strlen(destination)+strlen(source))*sizeof(char));
if((sizeof((strlen(destination)+strlen(source)))+1) > sizeof(destination))
destination = (char*)realloc(destination, sizeof((strlen(destination)+strlen(source)))+1);
return strcat(destination, source);
}

最佳答案

这一行:

destination = "string";

覆盖从 malloc(3) 返回的指针所以你永远失去了那个内存。您可能打算复制该字符串,因此请使用 strcpy(3)或者其他的东西。

关于c - 简单 strcat() 包装函数的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8038750/

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