2015-02-05 194 views
0

我正在寫C中的一個小函數來消除前導空格,但它給了我「表達式必須是可修改的左值」「錯誤:表達式必須是一個可修改的左值」,而試圖改變char *指針位置

char str1[20]; 
strcpy (str1, otherStr); 

for (int i = 0; i < strlen(str1); i++) 
{ 
    if (!isspace(str1[i])) 
     str1 = &(str1[i]); 
} 

我在這裏做錯了什麼? (是的,otherStr被定義)

+0

您不能更改數組的位置,它在編譯時由編譯器靜態分配。確實數組* *衰減*指針,但它們不是指針。如果你想用它作爲一個真正的指針,那麼你需要使用一個實際的指針。 – 2015-02-05 19:20:20

+0

代碼中沒有'char *'指針。數組不是一個指針。 – AnT 2015-02-05 19:20:57

回答

2

你的代碼中沒有char *指針,哪一個可能會改變。數組不是一個指針。你不能「改變」它的位置。

在C語言中,數組對象本身是不可修改的左值,這是錯誤措辭的來源。

+0

'&(str1 [i])'是'char *',我不確定OP是否理解它。 – ouah 2015-02-05 19:22:37

+0

現在我知道了。謝謝 – user2824889 2015-02-05 19:23:26

0
char *str1 = malloc(20); 
// or 
// char s[20]; 
// char * str1 = s; // note the lack &s 
// or 
// char *str1 = alloca(20); 
strcpy (str1, otherStr); 

for (int i = 0; i < strlen(str1); i++) 
{ 
    if (!isspace(str1[i])) 
     str1 = &(str1[i]); 
} 

您的代碼沒有工作,因爲當char str1[20]然後str1和不是一個變量 - 在大多數情況下它是一個指針文字,類似於(void *)0x0342會。你不能做0x0342 = 7;,所以你也不能分配給數組名。

相關問題