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