0
char str[33] = "";
snprintf(str, sizeof str, "%s%s%s%s", preg->opbits,preg->rsbits,preg->rtbits,preg->ibits);
char *instruction = &str[0]

32 ビット長の MIPS アセンブリ命令の文字列表現のさまざまな要素からバイナリ文字列を作成しようとしています。ここで、opbits は 6 ビットのオペコード、rsbits は最初のソース レジスタの 5 ビット数、rtbits はイミディエイト (i) タイプの命令のデスティネーション レジスタの 5 ビット番号と ibits は、16 ビット整数値を表します。これらを文字配列に連結し、その配列の最初の要素にポインターを割り当てたいと思います。そのポインターは、文字列として書き込まれた数値を変換する定義済みの関数に渡すことができます (strtoint 関数にも渡される指定されたベースで)。 ) を整数値に変換します。

私の主な質問は、連結されるすべての文字列の最後にある null バイトを考慮する必要があるかどうか、そして第二に、これはうまくいくでしょうか?

4

1 に答える 1

3

私の主な質問は、連結されるすべての文字列の最後にある null バイトを考慮する必要があるかどうか、そして第二に、これはうまくいくでしょうか?

いいえ、サブ文字列ごとにヌル文字を数える必要はありません。結果の文字列連結にヌル文字を 1 つだけ追加する必要があります。

したがって、文字列結果の長さが 32 + 1 (ヌル文字) = 33 の場合

したがって、結果の連結文字列の長さが32の場合、定義は問題ありません

char str[33] = "";
于 2013-02-01T16:42:49.343 に答える