第126章 文字列を取り扱う新しい関数 その2


VS2005では、strcat, strtok関数の新バージョンも導入されています



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関数と同じですね。




[Index][総合Index] [Previous Chapter] [Next Chapter]

Update May/20/2006 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。