私は次のコードを持っています:
char *s1, *s2;
char str[10];
printf("Type a string: ");
scanf("%s", str);
s1 = &str[0];
s2 = &str[2];
printf("%s\n", s1);
printf("%s\n", s2);
コードを実行し、次のように入力「A 1」を入力すると:
Type a string: A 1
私は次の結果を得ました:
A
�<�
最初の文字を文字列として、3番目の文字を整数として読み、それらを画面に出力しようとしています。最初の文字は常に機能しますが、その後画面にはランダムなものが表示されます。..どうすれば修正できますか?
あなたは正しい軌道に乗っています。修正版は次のとおりです。
char str[10];
int n;
printf("type a string: ");
scanf("%s %d", str, &n);
printf("%s\n", str);
printf("%d\n", n);
変更点について説明しましょう。
n
)を割り当てて、番号を保存しますscanf
に、最初に文字列、次に数字(%d
は番号を意味します。printf
で既に知っているとおりですこれでほとんどすべてです。 9文字を超えるユーザー入力はstr
をオーバーフローさせ、スタックの踏みつけを開始するため、コードはまだ少し危険です。
scanf("%s",str)
は、空白文字が見つかるまでのみスキャンします。入力"A 1"
、最初の文字のみをスキャンするため、s2
は、その配列が初期化されていないためにstr
にあるガベージを指します。
友達にこのコードを試してみてください...
#include<stdio.h>
int main(){
char *s1, *s2;
char str[10];
printf("type a string: ");
scanf("%s", str);
s1 = &str[0];
s2 = &str[2];
printf("%c\n", *s1); //use %c instead of %s and *s1 which is the content of position 1
printf("%c\n", *s2); //use %c instead of %s and *s3 which is the content of position 1
return 0;
}