用c語言編寫的以下代碼有什麼問題? 我遇到了分段錯誤。它是什麼?做數組和輸入與scanf齊頭並進?
int a[2];
for(i=0;i<2;i++)
{
scanf("%d",a[i]);
printf("%d",a[i]);
}
爲什麼不能運行?留下聲明。 scanf是否有延遲問題?
用c語言編寫的以下代碼有什麼問題? 我遇到了分段錯誤。它是什麼?做數組和輸入與scanf齊頭並進?
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]);
這否則你傳遞的a[i]
價值scanf()
需要,給它沒辦法更改的值。通過傳遞值的地址,scanf()
可以簡單地寫入所提供的內存地址來更改存儲在那裏的值。使用printf()
時,您不希望自己的值發生變化,因此將它們直接傳遞給printf()
就沒有問題。
另外,轉換(像許多其他形式的I/O)可能會失敗,所以你應該依靠轉換已經成功之前檢查返回值:
if(scanf("%d", &a[i]) == 1)
printf("%d\n", a[i]);
你或許應該閱讀the manual page for scanf()
一對夫婦更倍。 :)
將[i]的地址傳遞給scanf而不是a [i]的值。
scanf("%d",&a[i]);
請不要使用'scanf'和'printf'等庫函數,而不知道它的基本用法。在這裏閱讀手冊頁http://linux.die.net/man/3/scanf。 – VoidPointer
@VoidPointer這是非常好的評論,但我也問你別的東西。是的,scanf需要指針,但是當它不存在時會發生什麼,這是我的問題。此外,我遇到了分段錯誤。在這種情況下是什麼?] – Mani
清楚地提及這個問題。格式說明符後給出的'scanf'參數被認爲是**指針**。行爲是** undefined **當在第一個參數之後發送除整數'a [i]'的值之類的指針之外的參數時。 – VoidPointer