2

私は「C」の学習者であり、コードを記述しましたが、コンパイルした後、デバッグエラーメッセージが表示されます。コードは次のとおりです。

#include<stdio.h>
void main()
{
    int n,i=1;
    char c;
    printf("Enter Charecter:\t");
    scanf("%s",&c);
    printf("Repeat Time\t");
    scanf("%d",&n);
    n=n;
    while (i <= n)
    {
        printf("%c",c);
        i++;
    }
}

plsはこれが起こる理由とそれを解決する方法を教えてくれます

4

4 に答える 4

3

scanf("%s",&c);する必要がありますscanf("%c",&c);

%sフォーマット指定子は、scanfchar配列を渡していることを示します。%c1つの文字を渡すので、代わりに使用する必要があります。

scanf指定したアドレスに任意の長さのワードの後に​​nulターミネータを書き込もうとするため、現在のコードは予期しない動作をします。このアドレスには、単一の文字に(スタック上で)割り当てられたメモリがあるため、プログラムの他の部分(他のローカル変数など)で使用される可能性のあるメモリを上書きすることになります。

于 2012-12-11T14:48:48.797 に答える
3

scanf("%s", &c)メモリに書き込んでいますcが、単一ではcharなく"%s"、引数が配列であると想定しています。ヌル文字を追加するとscanf()、少なくとも2つ(からのchar読み取りとヌルターミネータ)に書き込まれますが、これは1つ多すぎます。ccharstdin

を使用して、によって書き込まれるchar[]数を制限します。charscanf()

char data[10];
scanf("%9s", data);

printf("%s", data);の代わりに使用%cするか"%c"、の形式指定子として使用しますscanf()

成功した割り当ての数であるの戻り値を常にチェックして、scanf()後続のコードが古い変数または初期化されていない変数を処理していないことを確認します。

if (1 == scanf("%d", &n))
{
    /* 'n' assigned. 'n = n;' is unrequired. */
}
于 2012-12-11T14:49:19.093 に答える
2

他の質問に対する答えを理解したかどうかわかりません:%cを使用すると奇数ループが機能しません

これらのフォーマット指定子は、それぞれ特定のジョブに使用されます。

取得したい場合:

  • stdin使用からの文字%c
  • 文字列(文字の束)は。を使用します%s
  • 整数使用%d

このコード:

char c;
printf("Enter Character:\t");
scanf("%c",&c);

から1文字を読み取り、そこに改行()文字stdinを残します。それで、ユーザーがあなたが持っているバッファ'\n'に文字Aを入力したとしましょう:stdin

A\n

はそれscanf()をプル'A'してあなたの中に保存しchar c、改行文字を残します。次に、intを要求し、ユーザーが入力する場合があります5stdin今持っている:

\n5

に配置scanf()5int nます。その'\n'を利用したい場合は、いくつかのオプションがあります。1つは次のとおりです。

char c;
printf("Enter Character:\t");
scanf("%c",&c);  // This gets the 'A' and stores it in c
getchar();       // This gets the \n and trashes it
于 2012-12-11T15:04:51.210 に答える
0

これがあなたのコードの動作バージョンです。修正については、コードのインラインコメントを参照してください。

#include<stdio.h>
void main()
{
    int n,i=1;
    char c;
    printf("Enter Character:\t");
    scanf("%c",&c);//Use %c instead of %s
    printf("Repeat Time\t");
    scanf("%d",&n);
    n=n;//SUGGESTION:This line is not necessary. When you do scanf on 'n' you store the value in 'n'
    while (i <= n)//COMMENT:Appears you want to print the same character n times?
    {
        printf("%c",c);
        i++;
    }
    return;//Just a good practice
}
于 2012-12-11T14:53:39.360 に答える