つまり、私が持っているのは、utils.hで作成したヘッダーファイルを含むファイルmain.cであり、ソースファイルutils.cの関数への前方参照が含まれています。
utils.cの場合:
文字列の配列を引数として受け取り、それをメニューとして出力する関数があります。
void showMenu(const char *menu[])
{
int menulen = sizeof(menu)/sizeof(*menu);
int i;
for(i = 0; i < menulen; i++)
{
printf("[%d] .. %s\n", (i+1), menu[i]);
}
}
main.c:
私は単にこの関数を呼び出します:
const char *menu[] =
{
"Customers",
"Orders",
"Products"
};
int main(void)
{
showTitle("Customer Orders System");
int menulen = sizeof(menu)/sizeof(*menu);
showMenu(menu);
getch();
}
私の問題:
私のshowMenu関数は、配列の長さを計算し、それを反復処理して文字列を出力しています。これは、関数がmain.cにあるときに機能していましたが、このプロジェクトを個別のファイルに整理する必要があります。
現在、長さは1として計算されています。デバッグを行った後、これはポインター関連の問題だと思いますが、解決したようです。呼び出し後のshowMenuの引数はタイプです
const char** menu
元の配列の最初の要素だけがあります。
引数を延期し、配列のポインターを渡して、両方を同時に実行してみました。
不思議なことに、同じコード行がmain関数で機能します。関数に長さの配列引数を追加して、この問題を解決する必要は本当にありません。
どんな助けでも大歓迎です。