● 関数リファレンス

文字列のコピー

    char * __stdcall   StrCalc_stringcopy(char *pdest,char *psrc,int len);

引数

引数名意味
pdestコピー先バッファのアドレス
psrcコピー元のアドレス
lenpdest が指すバッファのサイズ

戻り値

コピーが終了した位置を返します。

説明

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;
}