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

Jam*_*ing 11 c

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

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

#include <stdio.h>
#include <string.h>
#include <math.h>

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

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

小智 18

scanf("%d", multiple);
Run Code Online (Sandbox Code Playgroud)

应该:

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

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


Ed *_* S. 16

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

这样做的原因是scanf可以将变量的值设置为输入的值.如果未传递指针,则传递变量值的副本.当你通过你传递的值的副本的指针的指针,所以只要scanf的写入到相同的内存地址可以改变变量的值.


Rob*_*ert 6

更改

scanf("%d", multiple);
Run Code Online (Sandbox Code Playgroud)

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


Rap*_*rre 6

scanf 期望指向要设置的变量的指针.

正确的形式是

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