★2つ関数を紹介します。
・たくさんのアドバイスと回答があるので VBA の MID と LEFT 関数と同じ機能を紹介します。
●MID関数
char MyStrMid( char buff[], const char string[], int pos, int len )
{
char *dest = buff;
if ( pos < strlen(string) ){
for ( string += pos ; len > 0 ; len-- ){
if ( *string == '\0' ){
break;
}
*dest++ = *string++;
}
}
*dest = '\0';
return( buff );
}
●LEFT関数
char MyStrLeft( char buff[], const char string[], int len )
{
return( MyStrMid(buff,string,1,len) );
}
●書式
・MyStrMid( 抽出文字列領域, 文字列, 抽出開始位置, 抽出バイト数 );
戻り値は『抽出文字列領域』へのポインタを返します。
・MyStrLeft( 抽出文字列領域, 文字列, 抽出バイト数 );
戻り値は『抽出文字列領域』へのポインタを返します。
●使い方
char buff[ 5 + 1 ]; ←抽出用のバッファ領域(サイズは『取り出す文字数+NULL文字分』以上を指定)
char aaa[] = "abcdefghi"; ←C言語には文字列型がないので char 型の配列にする
MyStrMid( buff, aaa, 3, 5 ); ←3文字目~7文字目を抜き出す
printf( "buff=[%s]\n", buff );
最後に:
・上記の2つの関数でエクセル(VBA)の MID と LEFT と同じ処理を行えます。
・注意事項として MyStrMid、MyStrLeft 関数の引数に NULL ポインタを渡したときの対策はしていません。
このため NULL ポインタを渡さないことが絶対条件です。安全性を高めるには引数に NULL ポインタが
渡されたときの処理を追加して下さい。→上手に改良してね。
・VBA の RIGHT関数はご自分で作成してみて下さい。→出題かな。
・以上。もし良かったら上記の関数を使って下さい。