[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2007/03/30(Fri) 11:20
投稿者名:MOONEY
Eメール:
URL :
タイトル:
文字列型の最大サイズについて
こんにちわ。お世話になっております。

Dim str As String * 1048576

とすると、「固定長文字列の長さが不正です」とエラーになってしまいます。
サイズ的に「1048576」持たせたいのですが、対応方法はございますか。

開発環境:VB6.0(SP5) Windows XP Pro

投稿時間:2007/03/30(Fri) 11:42
投稿者名:YK
Eメール:
URL :
タイトル:
Re: 文字列型の最大サイズについて
> こんにちわ。お世話になっております。
>
> Dim str As String * 1048576
>
> とすると、「固定長文字列の長さが不正です」とエラーになってしまいます。
> サイズ的に「1048576」持たせたいのですが、対応方法はございますか。

固定長文字列の最大長さは 65526バイトです。

Dim str As String
str = Space(1048576)

では 駄目ですか?

投稿時間:2007/03/30(Fri) 11:55
投稿者名:MOONEY
Eメール:
URL :
タイトル:
Re^2: 文字列型の最大サイズについて
> > こんにちわ。お世話になっております。
> >
> > Dim str As String * 1048576
> >
> > とすると、「固定長文字列の長さが不正です」とエラーになってしまいます。
> > サイズ的に「1048576」持たせたいのですが、対応方法はございますか。
>
> 固定長文字列の最大長さは 65526バイトです。
>
> Dim str As String
> str = Space(1048576)
>
> では 駄目ですか?

ご返信ありがとうございます。
ご提案いただきました

> Dim str As String
> str = Space(1048576)

は、

Dim str As String * 1048576

と、同義なのでしょうか?(無知で申し訳ありません。)

投稿時間:2007/03/30(Fri) 11:57
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^3: 文字列型の最大サイズについて
> > 固定長文字列の最大長さは 65526バイトです。
65526バイト上限というのは、実は、ヘルプの表記ミスだったりします。

> > Dim str As String
> > str = Space(1048576)
> は、
> Dim str As String * 1048576
> と、同義なのでしょうか?(無知で申し訳ありません。)

別の意味です。(代替案ということですね)

投稿時間:2007/03/30(Fri) 12:16
投稿者名:MOONEY
Eメール:
URL :
タイトル:
Re^4: 文字列型の最大サイズについて
> 別の意味です。(代替案ということですね)

なるほど。。。う〜ん、どうしても当初指定したサイズのバッファを確保
しておきたいのですが。。。この場合「1048576」はムリですかね??

投稿時間:2007/03/30(Fri) 13:14
投稿者名:YK
Eメール:
URL :
タイトル:
Re^4: 文字列型の最大サイズについて
> > > 固定長文字列の最大長さは 65526バイトです。
> 65526バイト上限というのは、実は、ヘルプの表記ミスだったりします。
>
最大長さは 65535 ですね。

投稿時間:2007/03/30(Fri) 13:24
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^5: 文字列型の最大サイズについて
> > > > 固定長文字列の最大長さは 65526バイトです。
> > 65526バイト上限というのは、実は、ヘルプの表記ミスだったりします。
> >
>  最大長さは 65535 ですね。

65526 以上だったら実行時にエラーになりませんか?

投稿時間:2007/03/30(Fri) 13:32
投稿者名:K.J.K.
Eメール:
URL :
タイトル:
Re^6: 文字列型の最大サイズについて
> >  最大長さは 65535 ですね。
> 65526 以上だったら実行時にエラーになりませんか?

65527以上だとエラーになりますよね。
65526以下ならばエラーは起きません。

ですから、ヘルプの表記は正しいように見えます。

で、本題に関してですが、StringやSpace関数で領域を確保する、
というのが既に提示されていますが、それだとどうして駄目なので
しょうか?

投稿時間:2007/03/30(Fri) 13:54
投稿者名:K.J.K.
Eメール:
URL :
タイトル:
Re: 文字列型の最大サイズについて
> 65527以上だとエラーになりますよね。
> 65526以下ならばエラーは起きません。
>
> ですから、ヘルプの表記は正しいように見えます。

って、付属ヘルプの"制限"には2GBとか書いてありましたか。
これは正しくないですね。

付属ヘルプだと正しいと考えられるのは、
「固定長文字列の長さが不正です。」
で検索したときに得られる説明で、
「固定長文字列の長さが、65,526 バイトを超えています。」
というものになっています。

言語エラーではなく、IDEにおけるプレコンパイルエラーのようですから、
VBそのもののエラーとして扱うべきかは微妙なところですが、一般的には
そういう仕様である、と言えるのでは。

投稿時間:2007/03/30(Fri) 13:59
投稿者名:MOONEY
Eメール:
URL :
タイトル:
Re^2: 文字列型の最大サイズについて
みなさま、ご意見たくさんありがとうございます。

まずバッファサイズを「1048576」にすると宣言の時点で
エラーとなります。
先述したとおり「固定長文字列の長さが不正です」と。

それと「1048576へのこだわり」ですが、サーバー側と
揃えましょうということからきております。

サーバー側ではバッファサイズを「1048576」もたせて
あるようでして。。。サーバーはC言語なのですが。

投稿時間:2007/03/30(Fri) 14:08
投稿者名:K.J.K.
Eメール:
URL :
タイトル:
Re^3: 文字列型の最大サイズについて
> それと「1048576へのこだわり」ですが、サーバー側と
> 揃えましょうということからきております。

ですから、それが、
「『変数の宣言』と『領域の確保』とを切り離してはならない」
とする理由にはなりませんよね。

投稿時間:2007/03/30(Fri) 14:32
投稿者名:MOONEY
Eメール:
URL :
タイトル:
Re^4: 文字列型の最大サイズについて
> 「『変数の宣言』と『領域の確保』とを切り離してはならない」
> とする理由にはなりませんよね。

素っ頓狂な回答で大変失礼しました。
サーバーからの受信メッセージが最大「1048576」とのことで、
それに対応できるようにしたいのです。

(応えになっておりませんかね?すみません。。。)

投稿時間:2007/03/30(Fri) 14:54
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^5: 文字列型の最大サイズについて
> サーバーからの受信メッセージが最大「1048576」とのことで、
> それに対応できるようにしたいのです。

『サーバーからの受信メッセージ』というのが、どのような物かはわかりませんが、
その件については、先の代替案では解決できなかった、という事なのでしょうか?

であれば次策として、String 型以外のデータ(たとえば、Byte 配列やストリームなど)を
利用するといった方法も考えられるかと。

投稿時間:2007/03/30(Fri) 14:50
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^2: 文字列型の最大サイズについて
> って、付属ヘルプの"制限"には2GBとか書いてありましたか。
> これは正しくないですね。
ですます。


> 「固定長文字列の長さが、65,526 バイトを超えています。」
> というものになっています。
それについても、『バイト』単位であるという部分が NG である、ということです。
単純なバイト換算でいえば、その倍の量のデータを格納できるわけですし。

この点はもしかしたら、16bit 時代ヘルプからの修正漏れかも知れませんね。
(VB2 の固定長文字列はバイト単位であり、当時のヘルプには 64KB 上限と書かれている)

# とはいえ、Win3.1 + VB2 当時の固定長文字列型は、1万数千バイトを超えた時点で、
# スタックエラーになりましたけれども。

投稿時間:2007/03/30(Fri) 15:03
投稿者名:K.J.K.
Eメール:
URL :
タイトル:
Re: 文字列型の最大サイズについて
> > 「固定長文字列の長さが、65,526 バイトを超えています。」
> > というものになっています。
> それについても、『バイト』単位であるという部分が NG である、ということです。

なるほど。『バイト』を見落としていました。

投稿時間:2007/03/30(Fri) 14:13
投稿者名:YK
Eメール:
URL :
タイトル:
Re^7: 文字列型の最大サイズについて
> > >  最大長さは 65535 ですね。
> > 65526 以上だったら実行時にエラーになりませんか?
>
> 65527以上だとエラーになりますよね。
> 65526以下ならばエラーは起きません。
>
こんなに長い文字列は使用したことがないのでHelpだよりでした。
勉強になりました。

投稿時間:2007/03/31(Sat) 23:42
投稿者名:MOONEY
Eメール:
URL :
タイトル:
Re^8: 文字列型の最大サイズについて
みなさま、お世話になっております。

色々とアドバイス、ご教授いただきまして誠にありがとうございます。
どうやら、

Dim str As String

str = Space(数値)

で対応できるとのことでして。。。
どうもありがとうございました。