メインページ | アルファベット順一覧 | 構成 | ファイル一覧 | 構成メンバ | ファイルメンバ | 関連ページ

# dkcString.c

`#include "dkcString.h"`
`#include "dkcStdio.h"`
`#include "dkcOSIndependent.h"`
`#include <limits.h>`

dkcString.cのインクルード依存関係図

ソースコードを見る。

## マクロ定義
#define | DKUTIL_C_STRING_C
## 関数
BOOL | dkcIsSJIS1 (BYTE c)
BOOL | dkcIsSJIS2 (BYTE c)
BOOL | dkcIsSpace (BYTE c)
const char * | dkcGetSpaceSeparator ()
int WINAPI | dkcSJIS_StrChrSearch (const char *s, char c)
| SJIS文字を除外して文字を検索
int WINAPI | dkcSJIS_StrChrSearchLast (const char *s, char c)
| SJIS文字を除外して文字を検索
int WINAPI | dkcSJIS_StrChrSearchTail (const char *s, size_t len, char c)
int WINAPI | dkcSJIS_StrChrSearchInStr (const char *s, const char *c)
int WINAPI | dkcSJIS_StrChrSearchInStrLast (const char *s, const char *c)
int WINAPI | dkcSJIS_SearchPathSep (const char *s)
int WINAPI | dkcSJIS_SearchPathSepLast (const char *s)
int WINAPI | dkcStrStr (const char *dest, const char *src)
static int | dkcBMStrStrLogic (const char *text, const char *pattern)
int WINAPI | dkcBMStrStr (const char *dest, const char *src)
DKC_STRING *WINAPI | dkcAllocString (size_t size)
int WINAPI | dkcFreeString (DKC_STRING **ptr)
int WINAPI | dkcStringCopy (DKC_STRING *ptr, const char *str, size_t size)
int WINAPI | dkcStringConcatenate (DKC_STRING *ptr, const char *str, size_t size)
| http://www.google.com/search?num=50&hl=ja&lr=lang_ja&q=strcat+cat%82%c6%82%cd
int WINAPI | dkcStringInsert (DKC_STRING *ptr, size_t point, const char *str, size_t size)
int WINAPI | dkcStringErase (DKC_STRING *ptr, size_t point, size_t len)
int WINAPI | dkcStringReplace (DKC_STRING *ptr, size_t begin_, size_t end_, const char *str, size_t size)
size_t | dkcStringSize (const DKC_STRING *ptr)
size_t | dkcStringNum (const DKC_STRING *ptr)
const char *WINAPI | dkcStringPointer (const DKC_STRING *ptr)
int WINAPI | dkcStringGetBuffer (const DKC_STRING *ptr, char *buffer, size_t buffsize)
| DKC_STRINGの内部文字列をバッファにぶち込む
## 変数
static const BYTE | SJIS1_S1 = 0x81
static const BYTE | SJIS1_E1 = 0x9f
static const BYTE | SJIS1_S2 = 0xe0
static const BYTE | SJIS1_E2 = 0xf5
static const BYTE | SJIS2_S1 = 0x40
static const BYTE | SJIS2_E1 = 0x7e
static const BYTE | SJIS2_S2 = 0x80
static const BYTE | SJIS2_E2 = 0xfc

## マクロ定義

#define DKUTIL_C_STRING_C

| 作者: d金魚 参照: dkcString.h dkcString.c の 5 行で定義されています。

## 関数

DKC_STRING* WINAPI dkcAllocString | ( | size_t | size | ) |

| dkcString.c の 225 行で定義されています。 参照先 dkcAllocate(), dkcAllocMemoryStream(), dkcFree(), dkc_String::mByteSize, dkc_String::mStream, と NULL. 参照元 dkcAllocPathString().
    00225                                                {
    00226     DKC_STRING *p;
    00227     //へんな引数は除外
    00228     //if(dkcErrorFlagCheck(flag)) return edk_ArgumentException;
    00229
    00230     p = (DKC_STRING *)dkcAllocate(sizeof(DKC_STRING));
    00231     if(NULL==p) return NULL;
    00232
    00233     p->mStream = dkcAllocMemoryStream(size + 1);
    00234     if(NULL==p->mStream) goto Error;
    00235
    00236     p->mByteSize = 0;
    00237
    00238     return p;
    00239 Error:
    00240     dkcFree((void **)&p);
    00241     return NULL;
    00242 }

int WINAPI dkcBMStrStr | ( | const char * | dest,
|  | const char * | src
| ) |

| strstrをBM法でやってみたもの 戻り値: 最初に見つかった位置を返す -1なら見つからない / 覚え書き: It has not tested. dkcString.c の 216 行で定義されています。 参照先 dkcBMStrStrLogic().
    00217 {
    00218     return dkcBMStrStrLogic(dest,src);
    00219 }

static int dkcBMStrStrLogic | ( | const char * | text,
|  | const char * | pattern
| ) | `[static]`

| dkcString.c の 182 行で定義されています。 参照元 dkcBMStrStr().
    00183 {
    00184     int i, j, k, len;
    00185     int skip[UCHAR_MAX + 1];
    00186     unsigned char c, tail;
    00187
    00188     len = strlen((char *)pattern);  /* 文字列の長さ */
    00189     if (len == 0) return -1;        /* エラー: 長さ0 */
    00190     tail = pattern[len - 1];        /* 最後の文字 */
    00191     if (len == 1) {                 /* 長さ1なら簡単! */
    00192         for (i = 0; text[i] != '\0'; i++)
    00193             if (text[i] == tail) return i;
    00194     } else {                        // 長さ2以上なら表を作って…
    00195         for (i = 0; i <= UCHAR_MAX; i++) skip[i] = len;
    00196         for (i = 0; i < len - 1; i++)
    00197             skip[pattern[i]] = len - 1 - i;
    00198         /* i = len - 1; */          // いよいよ照合
    00199         while ((c = text[i]) != '\0') {
    00200 /*     // デモンストレーション用
    00201             printf("テ: %s\n", text);
    00202             printf("照: %*s\n", i + 1, pattern);
    00203 */
    00204             if (c == tail) {
    00205                 j = len - 1;  k = i;
    00206                 while (pattern[--j] == text[--k])
    00207                     if (j == 0) return k;  //見つかった
    00208             }
    00209             i += skip[c];
    00210         }
    00211     }
    00212     return -1;  // 見つからなかった
    00213 }

int WINAPI dkcFreeString | ( | DKC_STRING ** | ptr | ) |

| dkcString.c の 244 行で定義されています。 参照先 dkcFree(), dkcFreeMemoryStream(), と NULL. 参照元 dkcAllocPathString(), と dkcFreePathString().
    00244                                           {
    00245     //変な引数入れるな！
    00246     if(NULL==ptr || NULL==*ptr || NULL==(*ptr)->mStream){return edk_ArgumentException;}
    00247     dkcFreeMemoryStream(&(*ptr)->mStream);
    00248     return dkcFree((void **)ptr);
    00249 }

const char* dkcGetSpaceSeparator | ( |  | ) |

| 戻り値: 可視できる文字定数だったらTRUE dkcString.c の 65 行で定義されています。
    00065                                   {
    00066     static const char temp[]={
    00067         '\0',0x0a,0x0d,' ','\t'
    00068     };
    00069     return temp;
    00070 }

BOOL dkcIsSJIS1 | ( | BYTE | c | ) |

| 戻り値: cがSJISの１バイト目の時TRUE(1) dkcString.c の 40 行で定義されています。 参照先 SJIS1_E2, と SJIS1_S1.
    00041 {
    00042   // 普通に書けばこのような感じだが、高速化する
    00043   // if((c >= SJIS1_S1 && c <= SJIS1_E1) || (c >= SJIS1_S2 && c <= SJIS1_E2)) return TRUE;
    00044   /*
    00045     c ^= 0x20;
    00046   if(c >= (SJIS1_S1 ^ 0x20) && c <= (SJIS1_E2 ^ 0x20)) return TRUE;
    00047   return FALSE;
    00048     */
    00049     return ((c ^= 0x20) && (c >= (SJIS1_S1 ^ 0x20) && c <= (SJIS1_E2 ^ 0x20)));
    00050 }

BOOL dkcIsSJIS2 | ( | BYTE | c | ) |

| 戻り値: cがSJISの２バイト目の時TRUE(1) dkcString.c の 52 行で定義されています。 参照先 SJIS2_E1, SJIS2_E2, SJIS2_S1, と SJIS2_S2.
    00053 {
    00054     /*if(dkcmIsSJIS2(c)) return TRUE;
    00055   return FALSE;
    00056     */
    00057     return (c >= SJIS2_S1 && c <= SJIS2_E1) || (c >= SJIS2_S2 && c <= SJIS2_E2);
    00058 }

BOOL dkcIsSpace | ( | BYTE | c | ) |

| 戻り値: 半角全角を区別なしにSpace系の文字だったらTRUE dkcString.c の 60 行で定義されています。
    00061 {
    00062     return (c=='\0' || c==0x0a || c==0x0d || c==' ' || c=='\t');
    00063 }

int WINAPI dkcSJIS_SearchPathSep | ( | const char * | s | ) |

| 戻り値: パスセパレータが最初に見つかった位置を返す。 -1は見つからない dkcString.c の 155 行で定義されています。 参照先 dkcGetPathSep(), と dkcSJIS_StrChrSearchInStr(). 参照元 dkcPathStringElementErase_Logic(), dkcPathStringElementReplace_Logic(), と dkcPathStringGetFileExtension().
    00156 {
    00157     const char *target = dkcGetPathSep();
    00158     return dkcSJIS_StrChrSearchInStr(s,target);
    00159 }

int WINAPI dkcSJIS_SearchPathSepLast | ( | const char * | s | ) |

| 戻り値: パスセパレータが最期に見つかった位置を返す。 -1は見つからない dkcString.c の 161 行で定義されています。 参照先 dkcGetPathSep(), と dkcSJIS_StrChrSearchInStrLast(). 参照元 dkcIsTailPathSep(), と dkcPathStringGetFileName().
    00162 {
    00163     const char *target = dkcGetPathSep();
    00164     return dkcSJIS_StrChrSearchInStrLast(s,target);
    00165 }

int WINAPI dkcSJIS_StrChrSearch | ( | const char * | s,
|  | char | c
| ) |

| SJIS文字を除外して文字を検索 戻り値: 最初に見つかった位置を返す -1なら見つからない dkcString.c の 73 行で定義されています。 参照先 dkcmIsSJIS1, と dkcmIsSJIS2. 参照元 dkcIsRelativityPath(), dkcPathStringDevideBegin_Logic(), dkcPathStringDevideNext_Logic(), と dkcPathStringGetDrive().
    00074 {
    00075   // c == 0 も考慮している
    00076   int i;
    00077     for(i = 0; ; i++){
    00078       if(s[i] == c) return i;
    00079       if(s[i] == '\0') break;
    00080       if(dkcmIsSJIS1(s[i]) && dkcmIsSJIS2(s[i + 1])) i++;
    00081   }
    00082   return -1;
    00083 }

int WINAPI dkcSJIS_StrChrSearchInStr | ( | const char * | s,
|  | const char * | c
| ) |

| 複数の文字定数を検索指定できるdkcSJIS_StrChrSearch() / 覚え書き: It has not tested. dkcString.c の 118 行で定義されています。 参照先 dkcmIsSJIS1, と dkcmIsSJIS2. 参照元 dkcSJIS_SearchPathSep().
    00119 {
    00120     // c == 0 も考慮している
    00121   size_t i,j;
    00122     size_t len = strlen(c);
    00123     for(i = 0; ; i++){
    00124         if(s[i] == '\0') break;
    00125         if(dkcmIsSJIS1(s[i]) && dkcmIsSJIS2(s[i + 1])){
    00126             i++;
    00127             continue;
    00128         }
    00129         for(j=0;j<len;j++){
    00130       if(s[i] == c[j]) return i;
    00131         }
    00132   }
    00133   return -1;
    00134 }

int WINAPI dkcSJIS_StrChrSearchInStrLast | ( | const char * | s,
|  | const char * | c
| ) |

| 覚え書き: It has not tested. dkcString.c の 136 行で定義されています。 参照先 dkcmIsSJIS1, と dkcmIsSJIS2. 参照元 dkcSJIS_SearchPathSepLast().
    00137 {
    00138   int nLast = -1;
    00139     size_t i,j;
    00140     size_t len = strlen(c);
    00141   // c == 0 も考慮している
    00142   for(i = 0; ; i++){
    00143     if(s[i] == '\0') break;
    00144     if(dkcmIsSJIS1(s[i]) && dkcmIsSJIS2(s[i + 1])){
    00145             i++;
    00146             continue;
    00147         }
    00148         for(j=0;j<len;j++){
    00149             if(s[i] == c[j]) nLast = i;
    00150         }
    00151   }
    00152   return nLast;
    00153 }

int WINAPI dkcSJIS_StrChrSearchLast | ( | const char * | s,
|  | char | c
| ) |

| SJIS文字を除外して文字を検索 戻り値: 最後に見つかった位置を返す -1なら見つからない dkcString.c の 86 行で定義されています。 参照先 dkcmIsSJIS1, と dkcmIsSJIS2. 参照元 dkcPathStringGetFileExtension().
    00087 {
    00088   int nLast = -1,i;
    00089   // c == 0 も考慮している
    00090   for(i = 0; ; i++){
    00091     if(s[i] == c) nLast = i;
    00092     if(s[i] == '\0') break;
    00093     if(dkcmIsSJIS1(s[i]) && dkcmIsSJIS2(s[i + 1])) i++;
    00094   }
    00095   return nLast;
    00096 }

int WINAPI dkcSJIS_StrChrSearchTail | ( | const char * | s,
|  | size_t | len,
|  | char | c
| ) |

| SJIS文字を除外して文字を後ろから検索 戻り値: 後ろから検索して最初に見つかった位置を返す -1なら見つからない 覚え書き: It has not tested. dkcString.c の 98 行で定義されています。 参照先 dkcmIsSJIS1, と dkcmIsSJIS2. 参照元 dkcPathStringGetDirectory().
    00098                                                                     {
    00099     int i;
    00100     for(i=len;i > 0;i--){//sjisを調べるためi > 0 iが0になったら終了。
    00101         if(dkcmIsSJIS1(s[i - 1]) && dkcmIsSJIS2(s[i]) )
    00102         {
    00103             i--;
    00104             continue;
    00105         }
    00106         if(s[i] == c) return i;
    00107     }
    00108     //iが0の時。
    00109     if(! (dkcmIsSJIS1(s[i]) && dkcmIsSJIS2(s[i + 1]) ))
    00110     {
    00111         if(c==s[i]){
    00112             return 0;
    00113         }
    00114     }
    00115     return -1;
    00116 }

int WINAPI dkcStringConcatenate | ( | DKC_STRING * | ptr,
|  | const char * | str,
|  | size_t | size
| ) |

| http://www.google.com/search?num=50&hl=ja&lr=lang_ja&q=strcat+cat%82%c6%82%cd dkcString.c の 273 行で定義されています。 参照先 dkcMemoryStreamDynamicWrite(), dkcmNOT_ASSERT, dkc_String::mByteSize, dkc_MemoryStream::mNowOffset, dkc_String::mStream, と NULL. 参照元 dkcPathStringNormalizeConcatenateLogic(), と dkcStringInsert().
    00273                                                                             {
    00274     dkcmNOT_ASSERT(NULL==ptr  || NULL==ptr->mStream || 0==size);
    00275
    00276     if(0 != ptr->mByteSize){
    00277         ptr->mStream->mNowOffset --;//一つ減らしてNULL文字分を潰す。
    00278     }
    00279     if(DKUTIL_FAILED(dkcMemoryStreamDynamicWrite(ptr->mStream,str,size + 1)))//+1してNULL文字もコピー
    00280     {
    00281         return edk_FAILED;
    00282     }
    00283
    00284     ptr->mByteSize += size;
    00285
    00286     return edk_SUCCEEDED;
    00287 }

int WINAPI dkcStringCopy | ( | DKC_STRING * | ptr,
|  | const char * | str,
|  | size_t | size
| ) |

| dkcString.c の 252 行で定義されています。 参照先 dkcMemoryStreamClear(), dkcMemoryStreamDynamicWrite(), dkcMemoryStreamSeek(), dkcmNOT_ASSERT, edkcMemoryStreamSeekSet, dkc_String::mByteSize, dkc_String::mStream, と NULL. 参照元 dkcPathStringCopy().
    00253 {
    00254     dkcmNOT_ASSERT(NULL==ptr  || NULL==ptr->mStream || 0==size);
    00255
    00256     if(DKUTIL_FAILED(dkcMemoryStreamSeek(ptr->mStream,0,edkcMemoryStreamSeekSet))){
    00257         return edk_FAILED;
    00258     }
    00259
    00260     dkcMemoryStreamClear(ptr->mStream);
    00261
    00262     if(DKUTIL_FAILED(dkcMemoryStreamDynamicWrite(ptr->mStream,str,
    00263         size + 1/* + 1してNULL文字分もコピー*/)))
    00264     {
    00265         return edk_FAILED;
    00266     }
    00267
    00268     ptr->mByteSize = size;
    00269
    00270     return edk_SUCCEEDED;
    00271 }

int WINAPI dkcStringErase | ( | DKC_STRING * | ptr,
|  | size_t | point,
|  | size_t | len
| ) |

  | 引数:
  | ptr[in][out] | dkcAllocString()で確保したポインタ
  | point[in] | 何文字目以降を削除するのか
  | len[in] | pointから何文字Eraseするか。
戻り値: edk_SUCCEEDEDなら完全成功。 edk_Not_Satisfactoryならlenが大きすぎる等の理由から一応処理は出来たが要求した結果にはならなかった。 その他はエラー TODO: test dkcString.c の 334 行で定義されています。 参照先 dkc_stream_swap(), dkcMemoryStreamSeek(), edkcMemoryStreamSeekSet, dkc_MemoryStream::mBuffer, dkc_String::mByteSize, dkc_MemoryStream::mNowOffset, と dkc_String::mStream. 参照元 dkcPathStringElementErase_Logic(), と dkcStringReplace().
    00335 {
    00336     char *tp;
    00337     size_t size;
    00338     int r;
    00339
    00340     tp = (char *)ptr->mStream->mBuffer;
    00341     size = ptr->mStream->mNowOffset;
    00342     if(point + len >= size){
    00343         len = size - len;
    00344         dkcMemoryStreamSeek(ptr->mStream,len,edkcMemoryStreamSeekSet);
    00345
    00346         return edk_Not_Satisfactory;
    00347     }
    00348     else
    00349     {
    00350         dkc_stream_swap(&tp[point],size - point - 1,len);//要らない領域を後ろに持ってくる。
    00351
    00352         ptr->mByteSize -= len;//少なくする。
    00353         //多分バッファオーバーフローしないと思うけど･･･。
    00354         ptr->mStream->mBuffer[ptr->mByteSize] = '\0';
    00355
    00356
    00357         r = dkcMemoryStreamSeek(ptr->mStream,size - len,edkcMemoryStreamSeekSet);
    00358     }
    00359     return r;
    00360 }

int WINAPI dkcStringGetBuffer | ( | const DKC_STRING * | ptr,
|  | char * | buffer,
|  | size_t | buffsize
| ) |

| DKC_STRINGの内部文字列をバッファにぶち込む dkcString.c の 385 行で定義されています。 参照先 dkc_memcpy(), dkcStringNum(), dkc_MemoryStream::mBuffer, dkc_MemoryStream::mNowOffset, dkc_String::mStream, と NULL.
    00386 {
    00387     int r;
    00388     size_t num;
    00389     if(NULL==ptr) return edk_FAILED;
    00390     num = dkcStringNum(ptr);
    00391     r = dkc_memcpy(buffer,buffsize,ptr->mStream->mBuffer,ptr->mStream->mNowOffset);
    00392     if(DKUTIL_FAILED(r)) return r;
    00393
    00394     return r;
    00395     //return dkcStreamToBuffer(ptr->mStream,edkcStreamSeekSet,0,num,buffer,buffsize);
    00396 }

int WINAPI dkcStringInsert | ( | DKC_STRING * | ptr,
|  | size_t | point,
|  | const char * | str,
|  | size_t | size
| ) |

  | 引数:
  | ptr[in][out] | dkcAllocString()で確保したポインタ
  | point[in] | 何文字目以降に挿入するのか
  | str[in] | 挿入したい文字列
  | size[in] | strの文字数。
TODO: テストをする。この関数の実装は醜いので直す。 dkcString.c の 289 行で定義されています。 参照先 dkc_stream_swap(), dkcMemoryStreamGetSeekPoint(), dkcmNOT_ASSERT, dkcStringConcatenate(), dkc_MemoryStream::mBuffer, dkc_String::mStream, と NULL. 参照元 dkcPathStringElementInsert_Logic(), と dkcStringReplace().
    00290 {
    00291     size_t tpo;//一時オフセット保存
    00292     char *tp;//bufferのtemp
    00293     //char *mlctp;//mallocで確保したバッファのtemp
    00294     //size_t len;//tpo - point
    00295     //size_t maxbuffsize;//ptr->mStream->mSize - len
    00296
    00297     dkcmNOT_ASSERT(NULL==ptr  || NULL==ptr->mStream);
    00298     if(0==size){
    00299         return edk_Not_Satisfactory;
    00300     }
    00301     //lock thread
    00302
    00303     //ここらへんがステートマシンだから嫌＾＾；
    00304
    00305
    00306
    00307     //エラーチェック
    00308     {
    00309         tpo = dkcMemoryStreamGetSeekPoint(ptr->mStream);
    00310         if(point > tpo)
    00311         {//pointがはみ出ている。
    00312             return edk_ArgumentException;
    00313         }
    00314         //とりあえず、push!!
    00315         dkcStringConcatenate(ptr,str,size);//これでmByteSizeは+=されている。
    00316
    00317         tp = (char *)ptr->mStream->mBuffer;
    00318
    00319         //一度、Concatenateしたので再取得
    00320         tpo = dkcMemoryStreamGetSeekPoint(ptr->mStream);
    00321
    00322         //入れ替えしてやる。
    00323         dkc_stream_swap(&tp[point],tpo - point - 1,tpo - point - size - 1);
    00324
    00325     }
    00326     return edk_SUCCEEDED;
    00327
    00328     //unlock thread
    00329
    00330
    00331
    00332 }

size_t dkcStringNum | ( | const DKC_STRING * | ptr | ) |

| 戻り値: 文字列の文字数を返す。内部streamをstrlenにかけたものを保存しておいたものを取得。 dkcString.c の 376 行で定義されています。 参照先 dkc_String::mByteSize. 参照元 dkcStringGetBuffer().
    00376                                           {
    00377     return ptr->mByteSize;
    00378 }

const char* WINAPI dkcStringPointer | ( | const DKC_STRING * | ptr | ) |

| dkcString.c の 380 行で定義されています。 参照先 dkc_MemoryStream::mBuffer, と dkc_String::mStream. 参照元 dkcPathStringGetDirectory(), dkcPathStringGetDrive(), dkcPathStringGetFileExtension(), dkcPathStringGetFileName(), と dkcPathStringPointer().
    00380                                                            {
    00381     //if(dkcErrorPtrCheck(ptr)) return edk_FAILED;
    00382     return (const char *)ptr->mStream->mBuffer;
    00383 }

int WINAPI dkcStringReplace | ( | DKC_STRING * | ptr,
|  | size_t | begin_,
|  | size_t | end_,
|  | const char * | str,
|  | size_t | size
| ) |

  | 引数:
  | ptr[in][out] | dkcAllocString()で確保したポインタ
  | begin_[in] | 何処から(何文字目から
  | end_[in] | 何処まで(何文字目まで)注意：begin_からn byteまで　とかではない。
  | str[in] | 置換したい文字列
  | size[in] | strの文字数。
TODO: テストをする。この関数の実装は醜いので直す。 dkcString.c の 362 行で定義されています。 参照先 dkcStringErase(), と dkcStringInsert(). 参照元 dkcPathStringElementReplace_Logic().
    00364 {
    00365     //非効率だけどこれで＾＾；；；；
    00366     dkcStringErase(ptr,begin_,end_ - begin_);
    00367     return dkcStringInsert(ptr,begin_,str,size);
    00368 }

size_t dkcStringSize | ( | const DKC_STRING * | ptr | ) |

| dkcString.c の 372 行で定義されています。 参照先 dkc_String::mByteSize. 参照元 dkcPathStringDevideNext_Logic(), dkcPathStringGetDirectory(), dkcPathStringGetFileExtension(), dkcPathStringGetFileName(), と dkcPathStringSize().
    00372                                            {
    00373     return ptr->mByteSize;
    00374 }

int WINAPI dkcStrStr | ( | const char * | dest,
|  | const char * | src
| ) |

| strstrのWrapper 戻り値: 最初に見つかった位置を返す -1なら見つからない -2だと、あまりにも文字列が離れすぎていて表現できない。 dkcString.c の 168 行で定義されています。 参照先 NULL.
    00169 {
    00170     char *p = strstr(dest,src);
    00171     if(NULL==p) return -1;
    00172     if((size_t)p - (size_t)dest > INT_MAX){
    00173         return -2;
    00174     }
    00175     return (int)(p - dest);
    00176     /*int offset = p - dest;//overflowすると危ない
    00177     if(offset < 0) return -1;
    00178     return offset;
    00179     */
    00180 }

## 変数

const BYTE SJIS1_E1 = 0x9f`[static]`

| dkcString.c の 27 行で定義されています。

const BYTE SJIS1_E2 = 0xf5`[static]`

| dkcString.c の 29 行で定義されています。 参照元 dkcIsSJIS1().

const BYTE SJIS1_S1 = 0x81`[static]`

| dkcString.c の 26 行で定義されています。 参照元 dkcIsSJIS1().

const BYTE SJIS1_S2 = 0xe0`[static]`

| dkcString.c の 28 行で定義されています。

const BYTE SJIS2_E1 = 0x7e`[static]`

| dkcString.c の 33 行で定義されています。 参照元 dkcIsSJIS2().

const BYTE SJIS2_E2 = 0xfc`[static]`

| dkcString.c の 35 行で定義されています。 参照元 dkcIsSJIS2().

const BYTE SJIS2_S1 = 0x40`[static]`

| dkcString.c の 32 行で定義されています。 参照元 dkcIsSJIS2().

const BYTE SJIS2_S2 = 0x80`[static]`

| dkcString.c の 34 行で定義されています。 参照元 dkcIsSJIS2().