我已经用 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;
这个函数的一个变体(就malloc
在后面char*
,然后将字符分配给string[i++]
)完美地工作。