| ログイン | ご入会 |
ADC連絡先
|
|
|
|
|
Q:ある QuickTime のコードを Macintosh から Windows に移植しようとしています。Windows では Visual C++ を使っています。Pascal 文字列の作成時に、厄介な問題に遭遇しています。 A:アクセス違反の原因として一番考えられるのは、文字列データが読み取り専用メモリにあることです。 C 言語文字列は、文字列の最初の文字で始まり、ヌルの値(ASCII コードでの値はゼロ)で終わります。 Pascal 文字列は、文字列の長さ(バイト数)で始まり、終了文字はありません。 Macintosh では、型が異なります。 C 言語文字列は Pascal 文字列は たとえば、 どのプラットフォームにおいても、C 言語のリテラル文字列を Macintosh の C コンパイラは、 コードの移植性を確保するために、QuickTime Media Layer(QTML)は、長さバイトが 112 ( この QTML 機能を利用する開発者は、このような Pascal 文字列を書き込み可能なメモリに入れるように注意しなければなりません。自分の開発システムをこれを行うように設定することもできます。 または、この文字列を、非定数文字列バッファの初期値にもできます。
なお、開発者が C 文字列と Pascal 文字列の変換に利用できる推奨の関数があります。
これらの関数は、その場での変換(つまり、src と dst のパラメータが同じメモリアドレスを指させる)が可能なように作られていますが、前述したように、読み取り専用のバッファの内容を間違って変更しようとしたり、定数を不用意に破棄したりする原因になり得る、その場での変換しか行わないことによる制約はありません。 [2002 年 1 月 21 日] |