在編譯下面給定的代碼時,我得到了錯誤: lvalue required as left operation of assignment of the statementsstr i = str ((len-1)-i);和str ((len-1)-i) = temp;.
為什么?
char* str_reverse(char *str, int len)
{
char *temp;
int i, mid;
if(len%2 == 0)
{
mid = len/2 - 1;
}
else
{
mid = (len-1)/2;
}
for(i=0;i<mid;i )
{
temp = str i;
str i = str ((len-1)-i);
str ((len-1)-i) = temp;
}
return str;
}
uj5u.com熱心網友回復:
str 是一個左值,因為它是記憶體中包含地址的一個地方。
str i 只是一個右值,因為它只是一個地址
uj5u.com熱心網友回復:
使用 size_t 作為字串長度。
你把這個復雜化了:
char* str_reverse(char *str, size_t len)
{
char temp, *start = str, *end = str len -1;
if(str && *str)
{
while(start < end)
{
temp = *start;
*start = *end;
*end-- = temp;
}
}
return str;
}
uj5u.com熱心網友回復:
像這樣的表達
str i
是右值。他們不能被分配。和寫一樣
int x = 10;
int y = 20;
x y = 30;
但無論如何,你的函式本質上是不正確的。您需要交換字符而不是嘗試交換指標運算式。
還有這個 if 陳述句
if(len%2 == 0)
{
mid = len/2 - 1;
}
else
{
mid = (len-1)/2;
}
沒有多大意義,因為運算式的結果
len / 2
無論len是偶數還是后面的奇數都是一樣的。
例如2 / 2是等于1和3 / 2也等于1。
在函式內使用指標可以通過以下方式定義
char * str_reverse( char *str, size_t len )
{
if ( len != 0 )
{
for ( char *left = str, *right = str len; left < --right; left )
{
char c = *left;
*left = *right;
*right = c;
}
}
return str;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/335624.html
上一篇:由于分段錯誤,哈希表不起作用
下一篇:在c程式中翻譯這個數學函式
