我正在学习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)
那导致程序崩溃的原因是什么?
你需要,你的scanf参数是错误的
scanf("%c %d",&c, &n);
Run Code Online (Sandbox Code Playgroud)
这里你的根本问题是你没有证据证明碰撞发生的地方,因为我发现它是在scanf()中.
我建议你采用两种调试方法:
一个).在代码中添加打印语句,以便了解正在发生的事情b).使用交互式调试器,以便您可以单步执行并查看正在进行的操作.
归档时间: |
|
查看次数: |
760 次 |
最近记录: |