以下用c语言编写的代码有什么问题?我遇到了分段错误。它是什么?
int a[2];
for(i=0;i<2;i++)
{
scanf("%d",a[i]);
printf("%d",a[i]);
}
为什么不能运行?离开声明。scanf 有延迟问题吗?
这个:
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()
:)
将 a[i] 的地址而不是 a[i] 的值传递给 scanf。
scanf("%d",&a[i]);