C程序终止于-1(0xFFFFFFFF),看似没有理由?

时间:2010-10-24 18:52:05

标签: c pointers segmentation-fault scanf struct

#include <stdio.h>
typedef struct pduct {char name[20];
                        int price;
                        int stock;} PRODUCT;

void init(PRODUCT * product)
{
    printf("What is the name of the product: ");
    fgets(product->name, 20, stdin);
    printf("DEBUG: Did it get written...: %s", product->name);
    printf("What is the current stock of the item: ");
    scanf("%d", product->stock);
    printf("What is the price of the new item: ");
    scanf("%d", product->price);
}

int main()
{
    PRODUCT products[5];
    init(products);
    return 0;
}

现在,我真的有点失落。运行时,它将询问产品的名称,打印出来,因此我知道它存储了它,然后询问库存量,它将崩溃并返回-1。

我不知道出了什么问题。我已经尝试用fgets替换scanf,只是为了确定,但同样的事情发生了。我猜我的struct设置错了,但我不知道怎么做。可能是char数组吗?此外,无论我如何安排它,它始终是第二个输入。那么为什么第一个工作得那么好呢?

感谢您的帮助!

3 个答案:

答案 0 :(得分:10)

我可以看到的一个快速错误&中缺少scanf

scanf("%d", &product->stock);
            ^
scanf("%d", &product->price);
            ^

编译器警告你这样的错误:

warning: format ‘%d’ expects type ‘int *’, but argument 2 has type ‘int’

不要忽略编译器警告。

答案 1 :(得分:1)

您需要传递product->stock的地址。那就是:

scanf("%d", &product->stock);

答案 2 :(得分:1)

scanf获取指向存储结果的位置的指针。在这种情况下,您使用当前(未初始化)的stock值作为scanf结果写入位置的地址。你需要说scanf("%d", &product->stock)等等。