2017-10-07 122 views
1

代碼st =「hello」;在C編譯器的顯示錯誤需要左值是什麼意思,爲什麼這個錯誤似乎出現

#include<stdio.h> 
int main() 
{ 
    char st[10],*sr[10]; 
    st="hiiii"; 
    sr="gdfsdfsd"; 
    printf("%s %s",st,sr); 

    return 0; 
} 

這個程序顯示的要求左值誤差。

任何人都可以詳細解釋或分享我的鏈接,我可以提前瞭解更多的感謝?

+0

謝謝,但我不需要交替,但我需要知道爲什麼確切的錯誤是 – ash

+0

或'char st [] =「hiiii」' –

+0

謝謝你我知道這會工作,但我想知道爲什麼另一個不工作,我想要什麼導致這個錯誤的細節 – ash

回答

2

What are rvalues, lvalues, xvalues, glvalues, and prvalues?

左值(所謂的,歷史上,因爲左值可以出現在賦值表達式的左側)表示一函數或一個對象。

你正試圖給數組賦值(聲明爲type x[dimension];)。

C語言不允許這樣做。因此,數組不能是左值,這就解釋了編譯器的錯誤信息。

1

你不能爲數組類型賦值,我們可以說數組不是一個左值(接收賦值的值)。 有一種特殊情況,您可以在聲明時將其分配給數組,但在此之後不能使用。

char array[] = "hello world"; // OK 
array = "nop it doesn't work"; // KO 

分配給它的聲明後,數組的唯一方法,是將值複製到數組:

strcpy(array, "yeah it works"); 

需要注意的是,

char array[]; 
array++; 

顯然是行不通的,因爲它與

array = array + 1 

一定要記住數組不是指針。