gpt4 book ai didi

c - 在 C 中操作字符串数组

转载 作者:太空宇宙 更新时间:2023-11-04 05:55:33 25 4
gpt4 key购买 nike

我正在使用 C 语言复制一个基本的 shell(如在等待命令并在 UNIX 系统中执行命令的控制台程序中),并且需要能够操作 char 的二维数组来存储环境变量。

我编写了一个小函数来创建该二维数组并将每个字符串初始化为 NULL,然后再在我的代码中的其他地方填充它。除了它一启动程序就崩溃,出于某种原因。

我有类似的问题(即偶尔的段错误,可能是由于我在不适当的地方读/写)与其他两个函数,分别在需要时释放那些二维数组,并获取其中一个二维数组的长度。

如果我不使用这两个函数并在我的其余代码中 malloc 二维数组,除最后一个条目外不初始化任何东西为 NULL,而是直接在 malloc 之后复制 env 字符串,我有一些可行的方法.但最好能够防止内存泄漏,并让 ft_tabnew 函数起作用,以便我可以在未来的项目中重用它。

char        **ft_tabnew(size_t size)
{
char **mem;
size_t i;

if (!(mem = (char **)malloc(size + 1)))
return (NULL);
i = 0;
while (i < size + 1)
{
mem[i] = NULL;
i++;
}
return (mem);
}

void    ft_tabdel(char ***as)
{
int i;
int len;

if (as == NULL)
return ;
i = 0;
len = ft_tablen(*as);
while (i < len)
{
if (*as[i])
ft_strdel(&(*as[i]));
i++;
}
free(*as);
*as = NULL;
return ;
}

size_t      ft_tablen(char **tab)
{
size_t i;

i = 0;
while (tab[i])
i++;
return (i);
}

注意:ft_tabdel 中使用的 ft_strdel 函数正在释放动态分配的字符串,并将指针设置为 NULL。我已经在几个项目中使用它几个月了,它还没有让我失望。

希望你们这些优秀的人能够告诉我我对二维字符数组有什么误解,或者我在这里犯了什么愚蠢的错误。

谢谢。

最佳答案

您没有分配足够的空间。

if (!(mem = (char **)malloc(size + 1)))

只分配size+1 字节。但是需要为size+1指针分配空间,指针一般为4字节。您需要将元素的数量乘以每个元素的大小:

    if (!(mem = malloc((size + 1) * sizeof(*mem))))

关于c - 在 C 中操作字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28253866/

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