将scanf()与指针一起使用

时间:2014-11-05 17:28:30

标签: c pointers segmentation-fault

我试图将地址作为参数传递给练习过程。它没有用,所以我用这个简单的例子来找出错误:

int main(int argc, const char * argv[]) {
  int newCounter = 0; // I want to get the value of this using its address
  int *address; // The pointer
  printf("%p\n", &newCounter); // Printing the address
  scanf("%p", address); // We insert the address manually
  printf("%d\n", *address);
}

当我运行此程序时,在手动插入Segmentation fault: 11地址并按Enter键后,我收到一条消息newCounter,是否有人知道此代码有什么问题?

1 个答案:

答案 0 :(得分:1)

scanf()中,您必须将指针传递到您希望存储结果的位置。你应该这样:

scanf("%p", &address);

(注意使用&)。您正在获得段错误,因为scanf()假定您传递的参数是指向可以存储结果的有效内存位置的指针。

另外,scanf()只能阅读void *指针 - 您需要将address的声明更改为void *

void *address; // The pointer

并注意这一点:

printf("%d\n", *address);

您如何确保您输入的地址有效?这很可能会崩溃。