|
> どうにもコンパイラの環境がわからなかったので……。
最低限、お使いのコンパイラの名前とバージョンくらいはお書き下さい。
> 使用OSはXP(SP2)、コンパイラはWin32 Debugと表示されます。
> しかし、エラーは出ずに警告だけ……。内容は2つのfgetsの部分に
> 「'function' :間接参照のレベルが 'char *' と 'char ' で異なっています。」
> 「'fgets' : の型が 1 の仮引数および実引数と異なります。」
メッセージの内容等からみて、コンパイラはMicrosoft VisualC++(バージョンは不明)をお使いのようですね。
メッセージは、fgets関数に渡している実引数の型と仮引数の型が違いますよ、と言っています。
fgets関数の第1引数には、読み込んだ文字列の格納先のメモリ領域(char型配列)の先頭を指すポインタを渡します。
void get_string( char* p_str );
この仮引数"p_str"はポインタ型ですから、これをそのままfgets関数の第1引数に渡せば良いです。
ポインタ変数の頭に"*演算子"をつけると、そのポインタが指すデータの値をとりだすという意味になります。
ポインタの詳細については、大事なところですので参考書等でご確認ください。
# エラーにせずに警告で済ませているのは、C++のコンパイラとしては甘いような気がしますが、、、
# Borland C++ Compiler ver.5.5では、しっかりエラーにしてくれました。
> プロトタイプ宣言で*p_str1つしか呼び出さないようにしていますので、
> 2つの配列をどうすればいいのかよく分かっていないのです……。
get_string関数1回の呼び出しで2個の文字列を読み込みたいなら、引数を2個にする。
void get_string( char* p_str1, char* p_str2 )
{
printf("文字列str1 : ");
fgets( p_str1, 11, stdin );
fflush( stdin );
printf("文字列str2 : ");
fgets( p_str2, 11, stdin );
fflush( stdin );
}
int main()
{
...
get_string( str1, str2 );
...
}
あるいは、fgets関数呼び出しを1回にして、main関数から2回get_string関数を呼ぶ。
void get_string( char* p_str )
{
fgets( p_str, 11, stdin );
fflush( stdin );
}
int main()
{
...
printf("文字列str1 : ");
get_string( str1 );
printf("文字列str2 : ");
get_string( str2 );
...
}
以上。
|