質問: test(_t("12345")); の場合、retに41が返ってきてほしい。
回答: 数字に変換するための文字列を格納できるバッファを準備して そこに元文字列の指定位置から切り出して数値に変換します 今回の場合なら 受け取る文字列のバッファは2文字とc/c++の文字列の終端をあらわすnull文字との3文字分が最低でも入ります int test( lpctstr s ) { tchar buf[3]; tchar *p = s; int a,b,c,d; // 受け取り側を初期化 buf[0] = buf[1] = buf[2] = _t('\0'); // 12 をコピー _tcsncpy( buf, p, 2 ); a = atoi( buf ); // 受け取り側を初期化 buf[0] = buf[1] = buf[2] = _t('\0'); // 34 をコピー p += 2; _tcsncpy( buf, p, 2 ); b = atoi( buf ); // 受け取り側を初期化 buf[0] = buf[1] = buf[2] = _t('\0'); // 5 をコピー p += 2; _tcsncpy( buf, p, 1 ); c = atoi( buf ); d = a + b - c; return d; } といった具合です または sscanfを使ってもいいのであれば int test(lpctstr s ) { int a, b, c, d; // 文字列が不正だった場合の特殊な値 d = -9999; if ( 3 == _stscanf( s, _t("%2d%2d%d"), &a, &b, &c ) ) { d = a + b - c; } return d; } といった具合です