サイトマップ / 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つの文字列の中身を交換する関数を作ります。交換するには作業用の配列が必要です。
これを素直にコードにしたのが、ソースプログラムの 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言語講座−それ自体コンパイルできる教材を使った講座です−