errno_t strcat_s( char *strDestination, size_t sizeInBytes, const char *strSource );strDestinationには、追加先のバッファを指定します。
sizeInBytesには、追加先バッファのサイズを指定します。
strSourceには、追加する文字列を指定します。
正常終了した場合は 0 を返します。失敗した場合はエラー コードを返します。
では、サンプルを見てみましょう。
/* strcat01.c */ #include <stdio.h> #include <string.h> int main() { char name[32], buf[32]; printf("あなたの苗字は何ですか--- "); gets_s(buf, sizeof(buf)); printf("名前は何ですか--- "); strcpy_s(name, sizeof(name), buf); gets_s(buf, sizeof(buf)); strcat_s(name, sizeof(buf) - strlen(buf) - 1, buf); printf("あなたの名前は%sさんですね\n", name); return 0; }
strcat_s(name, sizeof(buf), buf);ではなく、
strcat_s(name, sizeof(buf) - strlen(buf) - 1, buf);となる点に注意してください。 bufには、すでに苗字が含まれているので、その分とヌル文字の分をひいてやる 必要があります。 実行結果は次のようになります。
strtok関数は、筆者はよく使います。
これもVS2005では、新バージョンが登場しました。
char *strtok_s( char *strToken, const char *strDelimit, char **context );strTokenには、切り分けの対象となる文字列を指定します。
strDelimitには、区切り文字のセットを指定します。
contextは、内部的にこの関数が利用します。
では、サンプルを見てみましょう。
/* strtok01.c */ #include <stdio.h> #include <string.h> int main() { char str1[] = "This is a pen. That is a pen. Here is a book.", seps[] = " ."; char *token, *nexttoken; token = strtok_s(str1, seps, &nexttoken); while (token != NULL) { printf("%s\n", token); token = strtok_s(NULL, seps, &nexttoken); } return 0; }実行結果は次のようになります。
引数が一つ増えただけで、使い方従来のstrtok関数と同じですね。
Update May/20/2006 By Y.Kumei