我已用C寫該功能的功能的內部動力分配/ rellocation(功能應當接收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++]
)完美運作。
我建議移動任何'++'等在任何非平凡的表達式內部到他們自己的語句。編譯器在優化之後應該仍然會產生相同的輸出,並且您可能會避免一些意外的行爲並且有更清晰的代碼。 – hyde