-1

以下用c语言编写的代码有什么问题?我遇到了分段错误。它是什么?

int a[2];
for(i=0;i<2;i++)
{
    scanf("%d",a[i]);
    printf("%d",a[i]);
}

为什么不能运行?离开声明。scanf 有延迟问题吗?

4

2 回答 2

2

这个:

scanf("%d",a[i]);

是错的。%d格式说明符需要一个指向转换后值应存储在何处的指针,即它应该是:

scanf("%d", &a[i]);

这是必需的,否则您将传递 to 的值a[i]scanf()使其无法更改该值。通过传递值的地址,scanf()可以简单地写入提供的内存地址以更改存储在那里的值。使用printf(),您不希望您的值发生变化,因此将它们直接传递给printf()就可以了。

此外,转换(与许多其他形式的 I/O 一样)可能会失败,因此您应该在依赖转换成功之前检查返回值:

if( scanf("%d", &a[i]) == 1 )
  printf("%d\n", a[i]);

您可能应该多读几次手册页。scanf():)

于 2013-06-18T15:22:52.010 回答
1

将 a[i] 的地址而不是 a[i] 的值传递给 scanf。

scanf("%d",&a[i]);
于 2013-06-18T15:24:43.080 回答