gpt4 book ai didi

c - Memset 覆盖另一个数组

转载 作者:行者123 更新时间:2023-11-30 20:04:51 29 4
gpt4 key购买 nike

我在使用 memset 函数时遇到了问题(包括预先实现的函数和我自己编写的函数)。

这是我遇到问题的代码:

static char *ft_trim(char *input)
{
char *res;

ft_putendl(input); // Here I check my input string.
res = ft_strnew(5);
ft_memset(res, '0', 5); // I tried using memset(res, '0', 5); same result
res[5] = '\0';
ft_putendl(input); // Second check

我想要的是res类似于“00000”。这些行做得很好,但同时 memset 似乎正在我的输入链中写入。我的输出如下:

lllllaarararttttRRR
lllllaararartttt00000

第一个输入提示没问题,但在第二个提示中我丢失了一些数据。

如果需要答案,这是我的 ft_memset 代码:

void    *ft_memset(void *b, int c, size_t len)
{
char *str;
unsigned long int i;

str = (char*)b;
i = 0;
while (i < len)
{
str[i] = c;
i++;
}
return (b);
}

这里还有ft_strnew:

char    *ft_strnew(size_t size)
{
char *str;

if (!(str = (char*)(malloc(sizeof(char) * (size + 1)))))
return (0);
ft_strclr(str);
return (str);
}

还有ft_strclr,以防万一。

void    ft_strclr(char *s)
{
int i;

i = 0;
while (s[i] != '\0')
{
s[i] = '\0';
i++;
}
}

ft_putendl

void    ft_putendl(char const *s)
{
ft_putstr(s);
write(1, "\n", 1);
}

ft_putstr

void    ft_putstr(char const *s)
{
int i;

i = 0;
while (s[i] != '\0')
{
ft_putchar((char)s[i]);
i++;
}
}

ft_putchar

void    ft_putchar(char c)
{
write(1, &c, 1);
}

至于main,我的代码被放置在一个函数中,该函数类似于3层函数调用(main调用一些东西,它调用一些东西,而这些东西又调用这部分)。 *输入是ft_strnew(int)的结果,并通过逐个字符复制逐渐填充。

至于上下文,与所述 char * 相关的唯一部分在这里:

*origin being a string from **argv

tmp = ft_strnew(/*an int I get*/);
i = 0;
while (*origin)
{
if (ft_isalpha(*origin) != 0)
{
tmp[i] = *origin;
i++;
}
origin++;
}

然后我从那里发送 *tmp,这是在帖子上方看到的*输入

最佳答案

OP ft_strnew() 调用 ft_strclr() ,该函数已无法修复,因为它不限制其迭代次数(无论是在最大还是最小意义上)并且在使用时使用 ft_strnew(),ft_strclr()` 它会读取未初始化的内存。

建议:

char *ft_strnew(size_t length) {
return calloc(length + 1, 1); // calloc zero fills the allocated memory
}

关于c - Memset 覆盖另一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36020982/

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