0

我目前正在学习 C,并且正在尝试构建一个简单的解释器。它需要一个字符和一个数字。下面的程序仅'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() 中。

我建议您采用两种调试技术:

一个)。在您的代码中添加打印语句,以便您知道发生了什么 b)。使用交互式调试器,这样您就可以单步执行并查看发生了什么。

于 2013-01-06T01:48:17.507 回答