gpt4 book ai didi

c - C 语言中 strdup() 的实现

转载 作者:行者123 更新时间:2023-12-02 06:21:59 26 4
gpt4 key购买 nike

我正在用 C 语言实现 strdup(),我是 C 新手,正在尝试构建自己的库。我正在使用 string.h 中的实际 strdup() 来测试我的,当我针对主程序测试我的源代码时,我遇到了总线错误,但当我测试时却没有遇到总线错误。使用实际的strdup()。另外,我无法使用除 malloc() 之外的任何现有函数。

源代码:

#include <stdlib.h>

char *ft_strdup(char *src)
{

char *str;
int len;

while (src[len])
len++;
str = (char*)malloc(sizeof(*str) * (len+1));
while (*src)
*str++ = *src++;
*str = '\0';
return (str);
}

为什么我总是收到总线错误?

最佳答案

尝试以下修复:

  1. 在增加 len 之前初始化它。
  2. Don't cast malloc's return value ,并且不要使用 sizeof(char),根据 cstd 6.5.3.4p4,它在标准中定义为 1:

    When sizeof is applied to an operand that has type char, unsigned char, or signed char, (or a qualified version thereof) the result is 1.

  3. 使用指针保存原来的str指针
<小时/>
#include <stdlib.h>

char *ft_strdup(char *src)
{
char *str;
char *p;
int len = 0;

while (src[len])
len++;
str = malloc(len + 1);
p = str;
while (*src)
*p++ = *src++;
*p = '\0';
return str;
}

关于c - C 语言中 strdup() 的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37132549/

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