NULLを含む文字列

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: NULLを含む文字列

by イグトランス » 2006年7月25日(火) 17:44

もっと短くmemcpy(ab, Ex"1\02\0", 4)やmemcpy(ab, Ex"1\02", 4)とも書けます。
Ex付きの文字列では\0がChr$(0)相当に扱われます。

さらに,これ以降abの中身を書き換えることが無ければ,abをBytePtr型にして,こうにも書けます。

コード: 全て選択

Dim ab As BytePtr
ab = Ex"1\02"

Re: NULLを含む文字列

by NoWest » 2006年7月25日(火) 16:45

> Dim ab As String
> ab = Chr$(&H31)+ Chr$(0)+Chr$(&H32)+ Chr$(0)
>
> 上記と同じ事を、Byte配列で行いたいのですが、
>
> Dim ab[3] As Byte
> lstrcpy(ab As BytePtr,Chr$(&H31)+ Chr$(0)+Chr$(&H32)+ Chr$(0))
>
> としても、NULLが入りません。
> どうすれば良いのでしょう?

さてさて、どうしてlstrcpyを使用したときにうまくいかないと思いますか?

この問いの答えは簡単で、lstrcpy関数はコピーしようとする文字列にNULL文字が含まれている場合、その場でコピーを止めてしまうんですね。

これをどうやって回避するかといいますとコピーしようとする文字の長さを予め指定してコピーしてやればよいということになります。

とはいっても、lstrcpy関数には文字の長さを指定することが出来ませんのでメモリ関連の操作にしようするmemcpy関数を変わりに使ってやります。

コード: 全て選択

Dim ab[3] As Byte
Dim str As String
str=Chr$(&H31)+Chr$(0)+Chr$(&H32)+Chr$(0)
memcpy(ab As BytePtr,StrPtr(str),4)

NULLを含む文字列

by 超初心者 » 2006年7月25日(火) 15:51

Dim ab As String
ab = Chr$(&H31)+ Chr$(0)+Chr$(&H32)+ Chr$(0)

上記と同じ事を、Byte配列で行いたいのですが、

Dim ab[3] As Byte
lstrcpy(ab As BytePtr,Chr$(&H31)+ Chr$(0)+Chr$(&H32)+ Chr$(0))

としても、NULLが入りません。
どうすれば良いのでしょう?

ページトップ