私は宿題に取り組んでおり、基本的に文字バッファを作成する必要があります。作成する必要のある関数の1つは、「b_reset」と呼ばれます。目的は、指定されたバッファを再初期化して、charバッファの最初の位置を指すようにすることです。これが必要なのは、後で新しい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]);
}
ここで何か問題が発生していることはわかっていますが、何が起こっているのかよくわかりません。任意の提案をいただければ幸いです。