【问题标题】:What is wrong with using scanf with a pointer without initializing?在没有初始化的情况下使用带有指针的scanf有什么问题?
【发布时间】:2017-10-12 12:06:27
【问题描述】:

scanf 接受一个指针参数。为什么我们不能传递一个指针变量?

int* x;
scanf("%d", x);
printf("%d", *x);

这没有给出输出.. 为什么?怎么了?

【问题讨论】:

  • 请读一本初级C书。首先,您需要初始化变量...
  • 谢谢...指针必须首先有一个值...现在它可以工作了.. int a = 0; int* x = &a; scanf("%d", x); printf("%d", *x);

标签: c scanf


【解决方案1】:

scanf%d 格式说明符需要一个指向 int 的指针,即 int *,这就是您要传递的内容。所以你正确地调用了这个函数。

你出错的地方是指针x 从未初始化,因此没有指向任何地方。 scanf 然后尝试将此未初始化的值作为地址读取,然后读取该虚假地址处的内容。读取未初始化的值会调用undefined behavior

您需要将x 指向某个地方,方法是为其分配int 变量的地址,或者使用malloc 动态分配内存。

int a;
int *x = &a;

或者:

int *x = malloc(sizeof(int));

【讨论】:

    猜你喜欢
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    相关资源
    最近更新 更多