C程序在打印阵列上崩溃

Zch*_*yvr 0 c arrays printf

我正在学习C语言,并且正在尝试构建一个简单的解释器.它需要一个字符和一个数字.以下程序仅'r'用于char.的'r'代表的范围内(自然数),并在数字后它指定的范围内的长度.

示例执行:

Enter:
      r 9
 0 1 2 3 4 5 6 7 8
Run Code Online (Sandbox Code Playgroud)

会发生什么:

Enter:
      r 9
Run Code Online (Sandbox Code Playgroud)

程序崩溃了.所以我认为错误在于打印数组.

有问题的代码在这里:

#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;
}
Run Code Online (Sandbox Code Playgroud)

那导致程序崩溃的原因是什么?

djn*_*jna 6

你需要,你的scanf参数是错误的

scanf("%c %d",&c, &n);
Run Code Online (Sandbox Code Playgroud)

这里你的根本问题是你没有证据证明碰撞发生的地方,因为我发现它是在scanf()中.

我建议你采用两种调试方法:

一个).在代码中添加打印语句,以便了解正在发生的事情b).使用交互式调试器,以便您可以单步执行并查看正在进行的操作.