私は C に非常に慣れていないので、購入した本で見つけたいくつかの問題を実行しています。このプログラムの何が問題になっていますか?
int main (void)
{
char text[50]='\0';
scanf ("%s", text);
printf("%c", text[49]);
printf("%s", text);
return 0;
}
私は C に非常に慣れていないので、購入した本で見つけたいくつかの問題を実行しています。このプログラムの何が問題になっていますか?
int main (void)
{
char text[50]='\0';
scanf ("%s", text);
printf("%c", text[49]);
printf("%s", text);
return 0;
}
char text[50]='\0';
有効じゃない。初期化をスキップtext
して宣言するだけです
char text[50];
または、最初の要素を初期化できます
char text[50]={'\0'};
のインクルードも欠落しており、呼び出しが文字列を読み取り、文字列の最大長を指定できることをstdio.h
実際に確認する必要がありますscanf
if (scanf("%49s", text) == 1)
あなたは取り除きたい:
printf("%c", text[49]);
文字列の長さが 49 秒未満の場合、そのメモリ位置に何があるかわかりませんchar
。
C では、シングル クォーテーションとダブル クォーテーションの違いがあります。
行 3 はコンパイルされません。これは、コンパイラが文字列を文字配列に割り当てることを要求しているためです。
できるよ
char text[50]="\0";
実際には、50 バイトすべてがゼロで埋められます。
あなたもできる
char text[50]="bla";
これにより、最初の 3 バイトが「bla」で埋められ、残りがゼロで埋められます。少なくとも私のコンパイラはそうしています。
とにかく次のステートメントだけでユーザー入力を入力するため、何もできません。
char text[50];
scanf ("%s", text);
しかし、問題があります。ユーザーが 49 文字未満の文字列を入力した場合、次のステートメントでランダムな出力が得られるためです。しかし、初期化するとゼロバイトが出力されますが、これもまったく役に立ちません。
ただし、主なポイントは、文字の配列を処理するときの C のさまざまな動作を学ぶことです。