访问冲突写入位置0x00000000。 从键盘读取int

我试图从键盘读取输入,我将用它来创建一组乘法。 如果我硬编码整数使用然后程序工作正常但是当我让用户输入他们自己的号码时程序崩溃并显示有关访问冲突的错误。

我确信这很简单,但由于我对C很新,所以我不完全确定使用该语言时要遵循的所有原则。

#include  #include  #include  void main() { int multiple = 0; int i; int answer; printf("Enter the multiple you wish to use..."); scanf("%d", multiple); printf("The multiplication table for %d is", multiple); for(i = 1; i <= 10; i++) { answer = i * multiple; printf("%d X %d = %d",i,multiple,answer); printf("\n"); } printf("Process completed."); } 

注意:我将倍数的初始值设置为0,否则在尝试使用未初始化的值时会遇到错误。

 scanf("%d", multiple); 

应该:

 scanf("%d", & multiple); 

换句话说,您需要为scanf指定一个指向您想要读入的内容的指针。 这是使用scanf()的一个经典错误,并且每个人都会不时地做出来,所以请记住下次做的时候:-)

只是为了解释为什么会发生这种情况(因为Neil已经解释了导致它的原因),scanf期待写入一个地址。 传递’multiple’ 时,它被解释为一个地址,特别是地址0,因为那是当时的值。

这样做的原因是scanf可以将变量的值设置为输入的值。 如果未传递指针,则传递变量值的副本。 当您传递指针时,您传递的是指针值的副本,因此只要scanf写入相同的内存地址,它就可以更改变量的值。

更改

 scanf("%d", multiple); 

 scanf("%d", &multiple); 

scanf需要一个指向要设置的变量的指针。

正确的forms是

 scanf("%d", &multiple); 

您没有传递多个变量的地址来存储scanf的结果,因此需要scanf("%d", &multiple);

这告诉运行时,读取一个整数并将其放入变量的地址中 ,因此必须使用。 没有它,您在传递变量值时会遇到运行时错误,但运行时不知道如何处理它。

在nut-shell中,变量地址&表示。

希望这会有所帮助,最好的问候,汤姆。