サイトマップ / C言語講座出入り口総目次目次:ポインタ>コーディングスタイル

青い直線

コーディングスタイル

青い直線

[文字列をコピー]←このソース→[文字列の長さ]

/* あるプログラムを作ると、誰でも同じソースプログラムが出来上がるかというと、そうはなりません。

コーディングスタイル

前回、StringCopy( )という関数を作りました。最初に考えたソースプログラムを案1に示します。

    案1
    void  StringCopy(char *s1, const char *s2)
    {
        while (*s2 != '\0')
            *s1 ++ = *s2++;
    }

StringCopy( )は以下のように書き換えることができます。案2は配列添字版 StringCopy( )とでも言えるもので、添字を使ってデータにアクセスします。

    案2
    void  StringCopy(char s1[ ], const char s2[ ])
    {
        int i = 0;

        while ((s1[i] = s2[i]) != '\0')
            i++;
    }

重要:'!='演算子の優先順位は'='よりも高いので、カッコが必要。

案3から5はポインタ版です。数字が増えるにつれて表現が簡潔になっています。

    案3
    void  StringCopy(char *s1, const char *s2)
    {
        while ((*s1 = *s2) != '\0') {
            s1 ++;
            s2++;
        }
    }

案4では、s2の値をs1へ代入してから、ポインタをインクリメントします。

    案4
    void  StringCopy(char *s1, const char *s2)
    {
        while ((*s1++ = *s2++) != '\0')
            ;
    }

案5には、!= '\0'がありませんが、s2 が'\0'を指すと、while ( )のカッコ内が偽となりループから抜けます。

    案5
    void  StringCopy(char *s1, const char *s2)
    {
        while (*s1++ = *s2++)
            ;
    }

案4または案5のスタイルで、コーディングすることを勧めます。可読性も良いと思います。

ソースプログラムの説明

今日はStringCopy( )を使って、2つの文字列の中身を交換する関数を作ります。交換するには作業用の配列が必要です。

  1. s1の中身を作業用配列にコピーし、
  2. s2の中身をs1にコピーし、
  3. 作業用配列の中身をs2にコピーする。

これを素直にコードにしたのが、ソースプログラムの XchangString( )です。 */

/* ここからソースプログラム */

#include  <stdio.h>

void  StringCopy(char *s1, const char *s2);
void XchangString(char *s1, char *s2);
void main(void);

  /* s1にs2をコピー */
void  StringCopy(char *s1, const char *s2)
{
    while (*s1++ = *s2++)
        ;
}

  /* s1とs2を入れ替える */
void XchangString(char *s1, char *s2)
{
    char work[80];           /* 作業用配列 */

    StringCopy(work, s1);    /* s1の中身を保存 */
    StringCopy(s1, s2);
    StringCopy(s2, work);
}

void main(void)
{
    char str1[80] = "Original";
    char str2[80] = "New";

    printf("str1:%s\n", str1);
    printf("str2:%s\n", str2);

    printf("XchangString(str1, str2);\n");
    XchangString(str1, str2);        /* 文字列の中身を交換 */

    printf("str1:%s\n", str1);
    printf("str2:%s\n", str2);
}

/* ここまでソースプログラム */

[文字列をコピー]←このソース→[文字列の長さ]

青い直線

/* (C) 2000- YFプロ. All Rights Reserved. */    提供:C言語講座−それ自体コンパイルできる教材を使った講座です−

青い直線

サイトマップ / C言語講座出入り口総目次目次:ポインタ>コーディングスタイル