文字列の長さを求める関数 strlen

strlenは、string.hをインクルードすれば、利用できます。
しかし正しく利用するには、その関数がどのように作られたものかを理解する必要があります。 以下では、この関数の定義例と利用例を紹介します。

正確には文字数でなく、文字列と判断できる範囲のbyteを返す関数です。
(文字列は、char *型で管理されるので、charのbyteサイズの並びで管理していることになります。)
文字列の終端コード'\0'を探す繰り返しにおいて、その繰り返しを数えることで、 バイト数を求めています。
よって、同じ文字列に対して何度も使うような使い方をすると、その度ごとで調べる繰り返し。
また、得られたバイト数は、'\0'をカウントしていません。つまり、 この文字列を、別の記憶域にコピーする場合、これで得られたバイト数+1のサイズの記憶域がないと、 そこに文字列としてのコピーができません。

引数のポインタ変数を変更しない定義例

仮引数 s で文字列先頭アドレスを受け取ります。そしてその s が指し示す文字から、 '\0'が出現する直前までの範囲に何バイトあるかを求めます。
それは i を0から始めて、 s[i]が'\0'になるまで、iを増やして、見つかるまでの回数 を数ることでバイト数をもとめています。その回数を戻す関数定義例は、次のになります。

#include <stdio.h>
int strlen(char *s)
{
	int i = 0;
	while(s[i] != '\0'){
		i++;
	}
	return i;
}
main()
{
	char a[10];
	int n;
	do {
		printf("文字列入力>"  );
		gets(a);/* 1行入力 */
		n = strlen(a);
		printf("strlen(\"%s\")の戻り値は%dです。\n", a , n );
	} while (n != 0);
}

strln関数定義の確認するためmainです。 文字列入力と、その文字列のbyte数を求める繰り返しを行なっています。
繰り返しは、空の文字列を入力するまで行なわれます。

文字列入力>abcd
strlen("abcd")の戻り値は4です。
文字列入力> a b c
strlen(" a b c")の戻り値は6です。
文字列入力>0
strlen("0")の戻り値は1です。
文字列入力>
strlen("")の戻り値は0です。

引数のポインタ変数を変更するstrln関数定義例

上記strlenと同じ機能を行なわせる別の定義例を、以下に示します。
ここでは、添え字用変数iを使っていません。ポインタの変数を変更することで、 '\0'の位置を探します。最後に見つかったポインタと、初期の先頭ポインタの差から、 範囲となるbyte数を求めて返しています。
(このように、ポインタからポインタを引くと、その間にある要素数の整数が得られます。
■■■■ の記述を正しく直して完成くだささい。
([]の配列演算子を使わずに、*のポインタ演算子を使ってください。ポインタ変更は後置インクリメントを使ってください)

←編集 入力後に クリックください。

このようなポインタの変数を変更する方式は、C言語独特の作り方です。