まず、以下のプログラムの実行結果で考えてください。
sizeof演算子:参考⇒(確認後はブラウザの戻る操作で戻ってください)
#include <stdio.h> void func(char a[]) { printf("引数aのサイズ:%d\n", sizeof(a) ); } main() { char a[255]; printf("配列aのサイズ:%d\n", sizeof(a) ); func( a ); }
配列aのサイズ:255 引数aのサイズ:4
C言語では、引数で a[] と配列宣言しても実質は (char *)型である a のポインタ型渡しになります。
よって、関数func側で、配列a の使える範囲が分かりません。
a[255] を超えて 例えば a[256] のアクセスするコードが書けて、実行すると配列以外の記憶域を変更するなど動作異常を起こす現象がおきます。
C言語で、独立した関数として配列を渡す場合は、何個の要素まで使えるかという情報を持たせた
次の関数定義にすべきでしょう。そして、引数length未満で要素をアクセスしなければいけません。
#include <stdio.h> void func(char a[], int length) { ・・・・・ a[0] から a[length-1] までアクセスできるプログラミング ・・・・・ } main() { char a[255]; func( a , 255); ・・・・・ }