「文字列処理」の編集履歴(バックアップ)一覧はこちら
文字列処理 - (2010/01/17 (日) 13:56:01) の1つ前との変更点
追加された行は緑色になります。
削除された行は赤色になります。
文字列処理は重要です。ポインタが理解出来ているかどうかの重要な見極めにもなります。
基本
"今日は○○する気分ではない"
という文字列は最後に0(ナル文字)がつきます。
ナル文字とヌルとヌルポインタの違いはその意味にあり、
null文字はゼロ終端系文字列(*1)に於ける文字の終了
nullは無効な値
null pointerは無効なポインタ
をそれぞれ意味します。
***補足
1)ゼロ終端系でない文字列にはPASCAL文字列等があり、PASCAL文字列は処理速度に優れた特性があるため、Excel内部等で用いられている。
文字列処理は重要です。ポインタが理解出来ているかどうかの重要な見極めにもなります。
基本
"今日は○○する気分ではない"
という文字列は最後に0(ナル文字)がつきます。
ナル文字とヌルとヌルポインタの違いはその意味にあり、
ナル文字(NUL)はゼロ終端系文字列(*1)に於ける文字の終了
nullは無効な値
null pointerは無効なポインタ
をそれぞれ意味します。
***補足
1)ゼロ終端系でない文字列にはPASCAL文字列等があり、PASCAL文字列は処理速度に優れた特性があるため、Excel内部等で用いられている。
**実際に使ってみよう
Sting型に慣れている人は面倒だと思うけど、ついてきて欲しい。
1 byte型配列を使おう!
#asciiart(blockquote){
#N88BASIC
Dim mes[123] As Byte'123バイト確保
lstrcpy(mes, "平井公彦")'mesに文字列をコピー
lstrcat(mes," 私は彼が好きです")'mesに連結
wsprintf(mes+lstrlen(mes), "%d",100)'100を文字列にして追加
Print MakeStr(mes)
}
なんということのないコードだが、配列にデータをコピーしているのであふれにように中尉。
おしりがNULなのでmes[8]=0などと直接値を代入しててもおk
2 ポインタ
#asciiart(blockquote){
#N88BASIC
Dim p As *Byte
Const A="平井公彦"
Const B="松嶋絵美"
p=A
Print MakeStr(p)
p=B
Print MakeStr(p)
}
エラーメッセージなどすでに文字列が確保されているようなときは、ポインタを使えばいい。
アドレスを渡すだけなので、バッファオーバーフローとかないし、速い。
しかし、ポインタの指した先がリテラルの場合は変更できないと思え。