var
sCode:String;
cCode:Array [1..10]of char;
begin
sCode:='1234567890';
cCode:=sCode;
sCodeをcCodeに代入したいのですがコンパイル時型エラーとなります。
解決策を教えてください
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 に見せかけてます。
cCode:Array [1..11]of char;
としてもエラーが出ますでしょうか?
文字列分+区切りとなります。
http://www.wakhok.ac.jp/~tetsuo/programing/Delphi/text/chap_h/pb...
ありがとうございます。
配列数を増やしてもコンパイル時にエラーとなります。
情報漏れでしたが、使用しているのはDelphi3です。
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 に見せかけてます。
ありがとうございました。
分かり易い解説たすかりました。
ありがとうございました。
分かり易い解説たすかりました。