web-dev-qa-db-ja.com

Cで整数と文字列を適切に「printf」するにはどうすればよいですか?

私は次のコードを持っています:

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番目の文字を整数として読み、それらを画面に出力しようとしています。最初の文字は常に機能しますが、その後画面にはランダムなものが表示されます。..どうすれば修正できますか?

17
user1420474

あなたは正しい軌道に乗っています。修正版は次のとおりです。

char str[10];
int n;

printf("type a string: ");
scanf("%s %d", str, &n);

printf("%s\n", str);
printf("%d\n", n);

変更点について説明しましょう。

  1. int(n)を割り当てて、番号を保存します
  2. scanfに、最初に文字列、次に数字(%dは番号を意味します。printfで既に知っているとおりです

これでほとんどすべてです。 9文字を超えるユーザー入力はstrをオーバーフローさせ、スタックの踏みつけを開始するため、コードはまだ少し危険です。

27
sblom

scanf("%s",str)は、空白文字が見つかるまでのみスキャンします。入力"A 1"、最初の文字のみをスキャンするため、s2は、その配列が初期化されていないためにstrにあるガベージを指します。

5
Daniel Fischer

友達にこのコードを試してみてください...

#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;
}
1
Nirav Patel