AB4.24.00で構造体の可変長配列を使いたいのですが、いくつかの方法を試して失敗しました。
どうすればいいか教えてください。
ちなみに固定長配列は成功しました。
AB4.24.00で構造体の可変長配列を使いたい
Re: AB4.24.00で構造体の可変長配列を使いたい
> AB4.24.00で構造体の可変長配列を使いたいのですが、いくつかの方法を試して失敗しました。
具体的にどんな方法をためしたの?
> どうすればいいか教えてください。
これが質問をする態度ですか?
ここは学校ではないし、誰もあなたをサポートする義務もありません。
何から何まで教えてもらう、否、他人を使おうとする態度はいただけません。
> ちなみに固定長配列は成功しました。
どうでもいい情報はいりません。
具体的にどんな方法をためしたの?
> どうすればいいか教えてください。
これが質問をする態度ですか?
ここは学校ではないし、誰もあなたをサポートする義務もありません。
何から何まで教えてもらう、否、他人を使おうとする態度はいただけません。
> ちなみに固定長配列は成功しました。
どうでもいい情報はいりません。
Re: AB4.24.00で構造体の可変長配列を使いたい
すいませんでした。
>具体的にどんな方法をためしたの?
>具体的にどんな方法をためしたの?
失敗した方法1 [ここをクリックすると内容が表示されます]
コード: 全て選択
#N88BASIC
Type TEST
tesuto1 As Long
tesuto2[7] As Byte
End Type
Dim testarr As **TEST
Dim dummy As TEST
Dim testptr As *TEST
testarr=calloc(3*Len(testptr))
testarr[0]=calloc(Len(dummy))
testarr[1]=calloc(Len(dummy))
testarr[2]=calloc(Len(dummy))
(testarr[0])->tesuto1=123
lstrcpy((testarr[0])->tesuto2,"test")
(testarr[1])->tesuto1=98765
lstrcpy((testarr[1])->tesuto2,"zikken")
(testarr[2])->tesuto1=45654
lstrcpy((testarr[2])->tesuto2,"dounaru")
Print (testarr[0])->tesuto1
Print MakeStr((testarr[0])->tesuto2)
Print (testarr[1])->tesuto1
Print MakeStr((testarr[1])->tesuto2)
Print (testarr[2])->tesuto1
Print MakeStr((testarr[2])->tesuto2)
free(testarr[0])
free(testarr[1])
free(testarr[2])
free(testarr)
失敗した方法2 [ここをクリックすると内容が表示されます]
コード: 全て選択
#N88BASIC
Type TEST
tesuto1 As Long
tesuto2[7] As Byte
End Type
Dim testarr As *TEST
Dim dummy As TEST
testarr=calloc(3*Len(dummy))
(testarr[0])->tesuto1=123
lstrcpy((testarr[0])->tesuto2,"test")
(testarr[1])->tesuto1=98765
lstrcpy((testarr[1])->tesuto2,"zikken")
(testarr[2])->tesuto1=45654
lstrcpy((testarr[2])->tesuto2,"dounaru")
Print (testarr[0])->tesuto1
Print MakeStr((testarr[0])->tesuto2)
Print (testarr[1])->tesuto1
Print MakeStr((testarr[1])->tesuto2)
Print (testarr[2])->tesuto1
Print MakeStr((testarr[2])->tesuto2)
free(testarr)
可変長配列っていうから
Type
str[0] As Byte
End Type
みたいなのを想像しちゃったよ。
幾つかの方法って2種類なんですね。試行錯誤もしないでよく言えたものです。
あなたのコードだけどこりゃひどい。
プログラムやってるんだからコンパイル通らないなら
エラーをよく読んでその意味を理解して欲しいんだけどね。
ポインタについてどれだけ理解しているのか…
.と->と[]の違いがよく分かってないんだね。
->は[0].と同じ意味を持つのね。
だからa->bはa[0].bと同じ。
ほかにも突っ込みどころが多すぎてあれなんだけど、答えを示すと
これがみけCATさんのやりたい事だと思うのですがどうでしょうか。
Type
str[0] As Byte
End Type
みたいなのを想像しちゃったよ。
幾つかの方法って2種類なんですね。試行錯誤もしないでよく言えたものです。
あなたのコードだけどこりゃひどい。
プログラムやってるんだからコンパイル通らないなら
エラーをよく読んでその意味を理解して欲しいんだけどね。
ポインタについてどれだけ理解しているのか…
.と->と[]の違いがよく分かってないんだね。
->は[0].と同じ意味を持つのね。
だからa->bはa[0].bと同じ。
ほかにも突っ込みどころが多すぎてあれなんだけど、答えを示すと
コード: 全て選択
#N88BASIC
Type TEST
tesuto1 As Long
tesuto2[7] As Byte
End Type
Dim testarr As *TEST
testarr = calloc(3 * SizeOf(TEST))
testarr[0].tesuto1=1
lstrcpy(testarr[0].tesuto2, "test1")
testarr[1].tesuto1=2
lstrcpy(testarr[1].tesuto2, "test2")
testarr[2].tesuto1=3
lstrcpy(testarr[2].tesuto2, "test3")
Dim i As Long
For i=0 To 2
Print testarr.tesuto1, MakeStr(testarr.tesuto2)
Next
これがみけCATさんのやりたい事だと思うのですがどうでしょうか。
Re: AB4.24.00で構造体の可変長配列を使いたい
あなたのコードでうまく動きました。
ありがとうございました。
失礼があったことを深くお詫びいたします。
申し訳ございませんでした。
ありがとうございました。
失礼があったことを深くお詫びいたします。
申し訳ございませんでした。