代碼st =「hello」;在C編譯器的顯示錯誤需要左值是什麼意思,爲什麼這個錯誤似乎出現
#include<stdio.h>
int main()
{
char st[10],*sr[10];
st="hiiii";
sr="gdfsdfsd";
printf("%s %s",st,sr);
return 0;
}
這個程序顯示的要求左值誤差。
任何人都可以詳細解釋或分享我的鏈接,我可以提前瞭解更多的感謝?
代碼st =「hello」;在C編譯器的顯示錯誤需要左值是什麼意思,爲什麼這個錯誤似乎出現
#include<stdio.h>
int main()
{
char st[10],*sr[10];
st="hiiii";
sr="gdfsdfsd";
printf("%s %s",st,sr);
return 0;
}
這個程序顯示的要求左值誤差。
任何人都可以詳細解釋或分享我的鏈接,我可以提前瞭解更多的感謝?
從What are rvalues, lvalues, xvalues, glvalues, and prvalues?:
左值(所謂的,歷史上,因爲左值可以出現在賦值表達式的左側)表示一函數或一個對象。
你正試圖給數組賦值(聲明爲type x[dimension];
)。
C語言不允許這樣做。因此,數組不能是左值,這就解釋了編譯器的錯誤信息。
你不能爲數組類型賦值,我們可以說數組不是一個左值(接收賦值的值)。 有一種特殊情況,您可以在聲明時將其分配給數組,但在此之後不能使用。
char array[] = "hello world"; // OK
array = "nop it doesn't work"; // KO
分配給它的聲明後,數組的唯一方法,是將值複製到數組:
strcpy(array, "yeah it works");
需要注意的是,
char array[];
array++;
顯然是行不通的,因爲它與
array = array + 1
一定要記住數組不是指針。
謝謝,但我不需要交替,但我需要知道爲什麼確切的錯誤是 – ash
或'char st [] =「hiiii」' –
謝謝你我知道這會工作,但我想知道爲什麼另一個不工作,我想要什麼導致這個錯誤的細節 – ash