人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Delphiキャストについて教えてください。

var
sCode:String;
cCode:Array [1..10]of char;
begin
sCode:='1234567890';
cCode:=sCode;

sCodeをcCodeに代入したいのですがコンパイル時型エラーとなります。
解決策を教えてください

●質問者: saiso
●カテゴリ:コンピュータ
✍キーワード:BEGIN Char Delphi String エラー
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● きゃづみぃ
●20ポイント

cCode:Array [1..11]of char;

としてもエラーが出ますでしょうか?

文字列分+区切りとなります。

http://www.wakhok.ac.jp/~tetsuo/programing/Delphi/text/chap_h/pb...

◎質問者からの返答

ありがとうございます。

配列数を増やしてもコンパイル時にエラーとなります。

情報漏れでしたが、使用しているのはDelphi3です。


2 ● quintia
●50ポイント ベストアンサー

cCode がnullターミネータ付きの文字配列になることを期待しているのならば要素数が1つ足りません。

var
 sCode:String;
 cCode:Array [1..11]of char;
begin
 sCode:='1234567890';
 StrCopy(@cCode[1], PChar(sCode));

か、

var
 sCode:String;
 cCode:Array [0..10]of char;
begin
 sCode:='1234567890';
 StrCopy(cCode, PChar(sCode));
 //StrCopy(@cCode[0], PChar(sCode)); も同じ

になります。添え字が0から始まる Char の配列は、配列名を書けば PChar に暗黙でキャストされますが、1から始まっていた場合はそうなりません。@cCode[1] と書きましょう。


cCode がnullターミネータ無しを期待しているのなら、

var
 sCode:String;
 cCode:Array [1..10]of char;
begin
 sCode:='1234567890';
 Move(PChar(sCode)^, cCode, SizeOf(cCode));

です。

Move手続きと StrCopy関数では Source と Dest が反転していることに注意してください。

また Move手続きは第1引数はポインタでは無く変数そのものを渡す必要があることも注意です。しかも長い文字列型(String型)は先頭に参照カウンタなどが入っていて直接ここに書けません。トリッキーですが PChar にキャストしてからポインタ逆参照をかけて Char に見せかけてます。

◎質問者からの返答

ありがとうございました。

分かり易い解説たすかりました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ