以下用c语言编写的代码有什么问题? 我遇到了分段错误。它是什么?
int a[2];
for(i=0;i<2;i++)
{
scanf("%d",a[i]);
printf("%d",a[i]);
}
为什么不能运行?离开宣言。 scanf有延迟问题吗?
答案 0 :(得分:2)
此:
scanf("%d",a[i]);
错了。 %d
格式说明符需要指针到转换后应存储的值,即它应该是:
scanf("%d", &a[i]);
这是必需的,否则您将a[i]
的值传递给scanf()
,因此无法更改值。通过传递值的地址,scanf()
可以简单地写入提供的内存地址以更改存储在那里的值。使用printf()
,您不希望您的值发生变化,因此将它们直接传递给printf()
就可以了。
此外,转换(与许多其他形式的I / O一样)可能会失败,因此您应该在依赖转换成功之前检查返回值:
if( scanf("%d", &a[i]) == 1 )
printf("%d\n", a[i]);
您应该多阅读the manual page for scanf()
几次。 :)
答案 1 :(得分:1)
将[i]的地址传递给scanf而不是a [i]的值。
scanf("%d",&a[i]);