0

私は現在Cを学んでいて、簡単なインタプリタを作ろうとしています。1文字と1つの数字が必要です。以下のプログラム'r'はcharにのみ使用します。('r'自然数の)範囲を表し、その後の数字は範囲の長さを指定します。

実行例:

Enter:
      r 9
 0 1 2 3 4 5 6 7 8

代わりに何が起こりますか:

Enter:
      r 9

そして、ここでプログラムがクラッシュします。したがって、エラーは配列の印刷にあると思います。

問題のコードはここにあります:

#include <stdio.h>
#include <stdlib.h>
int* range(int i) {
    int *a=(int*) malloc(i * sizeof(int));
    int j;
    for(j=0;j<i;j++)
        a[j]=j;
    return a;
}
void printArray(int a[], int length) {

    int i;
    printf("\n");
    for(i=0;i<length;i++)
        printf("%d  ", a[i]);

}

int main() {
    char c;
    int n = 1;
    while(n>=0){
        printf("\nEnter:\n\t");
        scanf("%c %d", c, n);
        if(c='r')
            printArray(range(n), n);
    }
    return 0;
}

では、プログラムがクラッシュする原因は何ですか?

4

1 に答える 1

6

scanfに対するあなたの議論は間違っています、あなたは必要です

scanf("%c %d",&c, &n);

ここでの基本的な問題は、クラッシュが発生している場所についての証拠がないことです。これは、scanf()にあると思います。

2つのデバッグ手法を採用することをお勧めします。

a)。コードにprintステートメントを追加して、何が起こっているかを把握しますb)。インタラクティブなデバッガーを使用して、ステップスルーして何が起こっているかを確認できます。

于 2013-01-06T01:48:17.507 に答える