● 関数リファレンス
文字列のコピー
char * __stdcall StrCalc_stringcopy(char *pdest,char *psrc,int len);
引数
引数名 | 意味 |
pdest | コピー先バッファのアドレス |
psrc | コピー元のアドレス |
len | pdest が指すバッファのサイズ |
戻り値
コピーが終了した位置を返します。
説明
psrc 内にある、ダブルクォートで括られた範囲の文字列を pdest にコピーします。コピーした文字列は、末尾にヌルを付加します。
まず、psrc の先頭側にある空白文字が読み飛ばされます。最初に出現した空白でない文字がダブルクォートではなかった場合、pdest にヌルを一文字セットし、終了します。
ダブルクォートだった場合は、その中身を pdest にコピーします。コピーは S-JIS 対応で、バッファサイズ分の文字列をコピーするか、次のダブルクォートかヌルが出現するまで続けられます。
なお、コピーは len - 1 を超えない文字単位で行われます。例えば、len が 2 で全角文字の "あ" が出現した場合、pdest には "あ" + ヌル を格納できるだけの空間が無いので、ヌルだけをセットし終了します。
例.
#include <windows.h>
#include <ctype.h>
#include "sc39.h"
/*
ユーザステートメント:ファイルの削除
@kill "ファイル名"
*/
INT __stdcall usr_kill(PSTRCALC_PARAM prm,LPSTR arg,INT len,LPVOID dmy)
{
CHAR filename[MAX_PATH+1];
LPSTR ptr;
/* ファイル名の取得 */
if (*(ptr = StrCalc_stringcopy(filename,arg,sizeof(filename))) != '\"')
return STATUS_SYNTAXERROR; /* ダブルクォートで終わっている事 */
/* 後ろに何も記述されていないかをチェック */
do{
ptr++;
}while(isspace(*ptr));
if (*ptr)
return STATUS_SYNTAXERROR;
return (DeleteFile(filename) == FALSE)?
STATUS_CANT_DELETE : STATUS_NORMAL;
}