書き込み*
void array_create(array_t* a, unsgined long length) // allocates memory, sets the max_length, zero length
void array_add(array_t* a, unsigned char byte) // add a byte
を*周り
をarray_t渡し、array_t取る配列関数を作成します文字列とバイトの両方を扱う共通の構造体。
struct str_or_byte
{
int type;
union
{
char *buf;
char *str;
}pointer;
int buf_length;
}
type
が文字列でない場合のみbuf_length
件までpointer.buf
にアクセスします。そうでない場合は、buf_length
をチェックせずに直接pointer.str
にアクセスし、ヌル終了文字列としてそれを維持してください。
それ以外の場合は、長さだけを考慮して文字列をバイト配列としても維持してください。文字列にnull終了文字を保持しないでください。
struct str_or_byte
{
char *buf;
int buf_length;
}
長さを考慮していない文字列操作関数を使用しないでください。これは、問題はあなたが考えているよりも、Cでより一般的である代わりにstrcpy
、strcat
、strcmp
...
バイト配列のラッパーを作成しますか? –
@ VaughanHilts私の問題を解決する方法は見当たりませんか? – Muis
文字列*はバイト配列です。実際にはCで配列を渡すことはできませんが、最初の要素へのポインタだけを渡すので、通常はサイズを渡す必要もあります。配列にゼロ値が含まれているかどうかを確認するだけです。そうであれば、それは "文字列"です。それ以外の場合は、そうではありません。 –