ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月29日(金) 19:12

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 7 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2006年10月04日(水) 17:07 
オフライン

登録日時: 2005年5月31日(火) 13:31
記事: 205
お住まい: 大阪市
たとえば、
コード:
Dim a AS String
Select Case a
End Select
だけでも、コンパイル中にコンパイラが落ちてしまいます。
Ver4.24では未発生で、Ver5.00CP3で発生します。

ちなみに、aが*Byte型(BytePtr型)では、正しく処理されてない()ような気がするのですが、仕様でしたっけ?(こちらはVer4.24 ・ Ver5.00CP3両方で確認。)

もし、こちら側(ソース)のミスだったらすいませんm(_ _)m


通報する
ページトップ
投稿記事Posted: 2006年10月04日(水) 22:23 
オフライン

登録日時: 2005年5月31日(火) 13:31
記事: 205
お住まい: 大阪市
さっき発見したバグ(?)なのですが、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 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 899
お住まい: 東京都
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 
オフライン

登録日時: 2005年5月31日(火) 13:31
記事: 205
お住まい: 大阪市
あ・・・・・ごめんなさい。色々と抜けてました。
コード:
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 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 899
お住まい: 東京都
ところでSecToHourはZeroStringして書き込む領域を用意していないようですが大丈夫ですか?


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年10月05日(木) 16:39 
オフライン

登録日時: 2005年5月31日(火) 13:31
記事: 205
お住まい: 大阪市
あ、それは大丈夫です。またここに書くのは忘れてましたけど・・・--;;;
SecToHour=ZeroString(8)
をwsprintfの前に書いています。

ふと思ったのですが、ZeroString(大まかに言えば書き込む領域の確保)って文字数が決まっていたらその最大文字数まで(さっきのソースの場合は8バイト)の確保で大丈夫なのでしょうか?それとも、念のため(?)に最大文字数+1とか"MAX_PATH"とかにした方がよいのでしょうか。?


バク報告板なのに質問してすいませんm(_ _)m


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2006年10月05日(木) 16:43 
オフライン

登録日時: 2005年5月31日(火) 13:31
記事: 205
お住まい: 大阪市
と、今他の書き込みを見ていたら、
Select Case [String型]のバグは
http://www.activebasic.com/forum/viewtopic.php?t=1586
で報告済みだったんですね。よく見てませんでした。


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 7 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[17人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean