ポインタを 使った演算が どうも・・・

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
wakaba
記事: 32
登録日時: 2007年1月27日(土) 14:03

ポインタを 使った演算が どうも・・・

#1 投稿記事 by wakaba »

構造体や ポインタでつまづいています。
ファイルから データを取得して 構造体に入れようとしましたが うまく行かず
とりあえず 配列にしてみました。
最初は 自力で 配列に入れてましたが あっ ポインタ演算があるんだと思いやってみました。
コードは 簡単になりましたが これで 良いのでしょうか?

Dim backFile[23,512] as Byte

Sub getData()
Dim temp as string
Dim fp as BytePtr
Dim hList As HWND

 fp=backFile
 Open "c:\test.txt" For Input As #1
 while Not Eof(1)
   Input #1,temp
   lstrcpy(fp,StrPtr(temp))
   fp=fp + 511
 Wend
 Close #1
end Sub

backFile[23,512] は 512バイトの配列を 23個準備したつもりです
それで fpを 511加算すれば 良いだろうと 適当に進めたら 動作はOKなのですが、なんか あっちこっちで 型の変換アラームは出るし 不安です
もっと 安全な簡単な方法とかも あるのでしょうか?
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#2 投稿記事 by konisi »

コード: 全て選択

Dim backFile[511,22] as Byte'配列は0から始まるので、確保したい数-1を書いておく。

Sub getData()
	Dim temp as String
	Dim fp as BytePtr
	Dim hList As HWND

	fp=backFile
	Open "c:\test.txt" For Input As #1
	while Not Eof(1)
		Input #1,temp
		lstrcpy(fp,StrPtr(temp))
		fp=fp + 512'ポインタは、必ず必要なだけずらす。
'例えば、1ずらしたい時には fp=fp+1 と書く。512ずらしたいのでfp=fp+512と書く。
	Wend
	Close #1
end Sub
の方が、理論的にあってる気がするのですが・・・。
それはともかく、command.sbpから型変換の警告が出てると思います。220行目周辺を

コード: 全て選択

			Case _System_Type_String
				_System_HeapStringFree(GetDWord(_System_InputDataPtr) As VoidPtr)
				i2=lstrlen(buffer)
				SetDWord(_System_InputDataPtr,_System_HeapStringAlloc(i2))
				memcpy(GetDWord(_System_InputDataPtr) As VoidPtr,StrPtr(buffer),i2)

と書き換えればとりあえず静かになります。
標準ファイルからの型変換警告はいつもの事なので、あまり気にしなくていいと思います。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
wakaba
記事: 32
登録日時: 2007年1月27日(土) 14:03

#3 投稿記事 by wakaba »

これで良かったので安心です。
何故か ポインタを加算するのは 変だと考えていたので モヤモヤが 消えた感じです。

>Dim backFile[511,22] as Byte'配列は0から始まるので、確保したい数-1を書いておく。

 カッコの中は 0~511と言う意味でしたか。解りました。初心者です。

>例えば、1ずらしたい時には fp=fp+1 と書く。512ずらしたいのでfp=fp+512と書く。

 この方が解り易いと思います。

xxxxxx>と書き換えればとりあえず静かになります。
>標準ファイルからの型変換警告はいつもの事なので、あまり気にしなくていいと思います。

 もう少し慣れたら 触ってみます
 しばらくは 気にしないようにします。ありがとうです。
返信する