我正在寫C中的一個小函數來消除前導空格,但它給了我「表達式必須是可修改的左值」「錯誤:表達式必須是一個可修改的左值」,而試圖改變char *指針位置
char str1[20];
strcpy (str1, otherStr);
for (int i = 0; i < strlen(str1); i++)
{
if (!isspace(str1[i]))
str1 = &(str1[i]);
}
我在這裏做錯了什麼? (是的,otherStr被定義)
我正在寫C中的一個小函數來消除前導空格,但它給了我「表達式必須是可修改的左值」「錯誤:表達式必須是一個可修改的左值」,而試圖改變char *指針位置
char str1[20];
strcpy (str1, otherStr);
for (int i = 0; i < strlen(str1); i++)
{
if (!isspace(str1[i]))
str1 = &(str1[i]);
}
我在這裏做錯了什麼? (是的,otherStr被定義)
你的代碼中沒有char *
指針,哪一個可能會改變。數組不是一個指針。你不能「改變」它的位置。
在C語言中,數組對象本身是不可修改的左值,這是錯誤措辭的來源。
'&(str1 [i])'是'char *',我不確定OP是否理解它。 – ouah 2015-02-05 19:22:37
現在我知道了。謝謝 – user2824889 2015-02-05 19:23:26
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;
,所以你也不能分配給數組名。
您不能更改數組的位置,它在編譯時由編譯器靜態分配。確實數組* *衰減*指針,但它們不是指針。如果你想用它作爲一個真正的指針,那麼你需要使用一個實際的指針。 – 2015-02-05 19:20:20
代碼中沒有'char *'指針。數組不是一個指針。 – AnT 2015-02-05 19:20:57