gpt4 book ai didi

C - 函数内的动态分配/重定位

转载 作者:太空宇宙 更新时间:2023-11-04 07:24:17 26 4
gpt4 key购买 nike

我已经用 C 语言编写了这个函数(函数应该接收一个 char*,分配必要的空间,并插入字符,给出一个指向指针后面字符索引的指针)

void add_to_str(char *character, char ** string, int* index)
{
//we dont expect *string to be NULL !! no condition done
if (*index == 0) //if str is empty we will alloc AVGLEN(32) characters space
*string=malloc(AVGLEN*sizeof(char));

if (*string == NULL) //malloc fails?
{
fprintf(stderr,errors[MALLOC]);
exit(99);
}
//string length exceeds 32 characters we will allocate more space
if ( *index > (AVGLEN-1) || character== NULL )// or string buffering ended, we will free redundant space
{
*string=realloc(*string,sizeof(char)*((*index)+2));//+1 == '\0' & +1 bcs we index from 0
if (*string==NULL) //realloc fails?
{
fprintf(stderr,errors[REALLOC]);
exit(99);
}
}
*string[(*index)++]=*character;
}

*index > 0时,它给我一个段错误

*string[(*index)++]=*character;

这个函数的一个变体(只是 char* 后面的 malloc,然后将字符分配给 string[i++])完美地工作。

最佳答案

你必须小心这个声明:

*string[(*index)++]=*character;

因为数组索引比指针解引用具有更高的优先级。因此,这与

*(string[(*index)++]) = *character;

这不是你想要的。你想要这个:

(*string)[(*index)++] = *character;

错误代码适用于*index == 0,因为在那种情况下,该语句等同于**string,它仍然有效,但是当 index > 0string 将在无效位置被取消引用:string+index

关于C - 函数内的动态分配/重定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19526895/

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