我正在做家庭作业,我需要基本上创建一个字符缓冲区。我需要创建的功能之一称为“b_reset”。它的目的是重新初始化给定的缓冲区,使其指向 char 缓冲区中的第一个位置。这是必要的,因为稍后,当一个新的字符被添加到缓冲区时,它需要被添加到缓冲区的第一个位置。
这是我到目前为止的代码:
结构:
typedef struct BufferDescriptor {
char * ca_head ;
int capacity ;
char inc_factor;
int addc_offset ;
int mark_offset ;
char r_flag;
char mode;
} Buffer ;
编码:
int b_reset ( Buffer *pB )
{
Buffer *temp = NULL;
int i = 0;
int j = 1;
if (pB == NULL)
{
return R_FAIL_1;
}
else
{
temp = (Buffer*)malloc(sizeof(Buffer*));
if (temp == NULL)
{
return R_FAIL_1;
}
temp->ca_head = (char*)malloc(pB->capacity);
if (!temp->ca_head)
{
temp = NULL;
return R_FAIL_1;
}
for(i = 0;i < ca_getsize(pB);++i)
{
temp->ca_head[j] = pB->ca_head[i];
j++;
}
pB->ca_head = temp->ca_head;
//free(temp->ca_head);
//free(temp);
return 0;
}
}
我在这段代码中的目标是创建一个临时缓冲区,它基本上会根据实际给定的缓冲区将所有内容转移 1 次。这将使第一个位置为空,因此可以添加另一个字符。
我遇到的问题是原始缓冲区在我重置后似乎没有返回正确的值。
例如,当我这样做时:
temp->ca_head[0] = 'a';
temp->ca_head[1] = 'b';
temp->ca_head[2] = 'c';
temp->ca_head[3] = 'd';
temp->ca_head[4] = 'e';
b_reset(temp); //this will return the size as 0, when it's actually 5
//temp->ca_head[0] = 'i'; //if this is executed, it returns the size as 6
//and prints out the right values, but if it's not,
//it will not print out anything
printf("%d", ca_getsize(temp));
for(i = 0;i < ca_getsize(temp);++i)
{
printf("%c", temp->ca_head[i]);
}
我知道这里出了点问题,但我不太确定是什么。任何建议将不胜感激。