ページ 1 / 1
Select Case [String型]でコンパイラが落ちる
Posted: 2006年10月04日(水) 17:07
by Mario2
たとえば、
コード: 全て選択
Dim a AS String
Select Case a
End Select
だけでも、コンパイル中にコンパイラが落ちてしまいます。
Ver4.24では未発生で、Ver5.00CP3で発生します。
ちなみに、aが*Byte型(BytePtr型)では、正しく処理されてない(
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]以下の様なソースの場合、Case Elseの処理が行われます。
コード: 全て選択
Dim b As *Byte
b=".mp3"
Select Case b
Case ".ogg"
msgbox 0,"0"
Case ".mp3"
msgbox 0,"1"
Case ".wav"
msgbox 0,"2"
Case Else
msgbox 0,"3"
End Select
(本文(?)に"3"と書かれたダイアログが出る)
ちなみに、bをMakeStr(b)にしてもコンパイラが落ちました。
)ような気がするのですが、仕様でしたっけ?(こちらはVer4.24 ・ Ver5.00CP3両方で確認。)
もし、こちら側(ソース)のミスだったらすいませんm(_ _)m
別報告になるのですが・・・
Posted: 2006年10月04日(水) 22:23
by Mario2
さっき発見したバグ(?)なのですが、wsprintf()の動作がおかしいです。AB5.00CP3で確認。
動作がおかしいと言うか、たとえば、
wsprintf(SecToHour,"%02s:%02s:%02s",Str$(Hour),Str$(Minute),Str$(Second))
だと、普通に"11:22:33"とかになるのですが、これを5.00CP3で実行すると、"-@:<^:\]"みたいに"%02s"の部分が文字化けしてしまってます。
新String型の影響なのかどうかわかりませんが、調査お願いします。
Posted: 2006年10月04日(水) 22:57
by イグトランス
wsprintfの方はどうしようもないと思います。
StrPtrなどを使って*Byteへ変換することを明示してやるしかないと思います。
例: wsprintf(SecToHour, "%02s:%02s:%02s", StrPtr(Str$(Hour)), StrPtr(Str$(Minute)), StrPtr(Str$(Second)))
なんでこうなるかというと,通常*Byteを引数に取ると宣言されている関数にString型のインスタンスを渡すと*Byteへ変換されますが,
wsprintfは可変個の引数を取るという性質上,どんな引数を取るか全く指定されていません。
だからString型のインスタンスを渡すと,*Byteへの変換が行われないまま生のStringが渡されてしまい,おかしなことになってしまうのです。
Posted: 2006年10月05日(木) 00:02
by Mario2
あ・・・・・ごめんなさい。色々と抜けてました。
コード: 全て選択
Dim SecToHour As String
Dim Hour As Long
Dim Minute As Long
Dim Second As Long
Hour=2
Minute=29
Second=10
wsprintf(SecToHour,"%02s:%02s:%02s",Str$(Hour),Str$(Minute),Str$(Second))
ってソースで、AB4.24時には正常ですが、5.00CP3ではおかしな文字列が帰るのです。
でも、wsprintf()の件はイグトランスさんの説明で、なぜこういうことになったのか、等々がわかりました。あと"例:"のコードで正常表示されました。ありがとうございます。
Posted: 2006年10月05日(木) 00:11
by イグトランス
ところでSecToHourはZeroStringして書き込む領域を用意していないようですが大丈夫ですか?
Posted: 2006年10月05日(木) 16:39
by Mario2
あ、それは大丈夫です。またここに書くのは忘れてましたけど・・・--;;;
SecToHour=ZeroString(8)
をwsprintfの前に書いています。
ふと思ったのですが、ZeroString(大まかに言えば書き込む領域の確保)って文字数が決まっていたらその最大文字数まで(さっきのソースの場合は8バイト)の確保で大丈夫なのでしょうか?それとも、念のため(?)に最大文字数+1とか"MAX_PATH"とかにした方がよいのでしょうか。?
バク報告板なのに質問してすいませんm(_ _)m
Posted: 2006年10月05日(木) 16:43
by Mario2
と、今他の書き込みを見ていたら、
Select Case [String型]のバグは
http://www.activebasic.com/forum/viewtopic.php?t=1586
で報告済みだったんですね。よく見てませんでした。