2

私はダミーのCを読んでいて、本の例をやっています。一行ずつ書き出すように言われました。次に、コードにバグがあっても本を進めます。ここにあります:

#include <stdio.h>

int main()
{

char me[20];
printf("What is your name?");
scanf("%s",&me);
printf("Darn glad to meet you. %s!\n".me);

return(0);

}  

gccによると:

WHORU.C: 関数 'int main()' 内: WHORU.C:8:19: 警告: フォーマット '%s' はタイプ 'char*' の引数を期待していますが、引数 2 のタイプは 'char (*)[20] です' [-Wformat] WHORU.C:9:43: エラー: メンバー 'me' in '"会えて嬉しいです。%s!\012"' のリクエストで、非クラス型 'const char [28 ]'</p>

私は C に慣れていないので、どこが間違っていたかを指摘することはできません。このコードは、実行時に入力が必要であることを知っています。これは、Java のスキャナーのようなものです。

みんなありがとう。

4

3 に答える 3

3
scanf("%s",&me);

次のようにする必要があります。

scanf("%s",me);

scanf()渡した変数へのポインタを受け取ります。しかし、C では、配列は渡されるとポインターに減衰するため、必要はありません&

もう 1 つのエラーは、.printf に があるはずの があること,です。

printf("Darn glad to meet you. %s!\n".me);

次のようにする必要があります。

printf("Darn glad to meet you. %s!\n",me);
于 2012-07-08T05:50:34.033 に答える
2

それを使用するだけscanf("%s",me);で、問題が解決するはずです。Cme[]では と同等*meです。

于 2012-07-08T05:42:27.513 に答える
0

またはは文字の配列へのポインタであるのに対し、 は文字の配列の先頭にある単一の文字へのポインタであると推測する危険がscanf("%s",&me);あります。個人的には、「配列の最初の文字のアドレスを取得する」のように論理的に思えるため、最初の方法を好みます。scanf("%s",&me[0])scanf("%s",me)&me&me[0]

さらに、printf("Darn glad to meet you. %s!\n".me);me は printf 関数の引数であるため、文字列と「me」の間にピリオドではなく、おそらくコンマが必要です。ピリオドを使用すると、「会えて嬉しいです。%s!\n」という文字列で、存在しない「me」というメンバーを探します。Javaでも同じ問題が発生するため、これは単なるタイプミスだと思います。

于 2012-07-08T05:44:18.287 に答える