2011-10-29 23 views
1

這似乎是一個很好的地方。我的問題是,我在這個memmove()的實現中移動了什麼值(或多少字節)?C - memmove()函數 - 我在這個實現中移動了多少個字節?

int main() 
{ 
char str[] = "memmove can be very useful......"; 
memmove (str+15,str+20,/*?*/); 
puts (str); 
return 0; 
} 

在下一個例子中它說我正在移動11個字節。但是,什麼使它11個字節?有人可以解釋嗎?

int main() 
{ 
char str[] = "memmove can be very useful......"; 
memmove (str+20,str+15,11); //source and destination are reversed 
puts (str); 
return 0; 
} 

謝謝!

編輯:順便說一句,字符串的長度是33,包括終止空字符。

+1

'int main()'應該是'int main(void)'。更重要的是,你需要'#包括'和'#包括'。如果你的編譯器沒有提醒你這個問題,請提高它的警告級別,直到它發生。 –

+0

你給我們展示的不是「memmove()的實現」,它只是一個調用'memmove()'的程序。 'memmove()'的*實現將是運行時庫中的代碼,它實際上是複製字節的。 –

+0

11使它11個字節。咄。在第一個例子中,除非您將一個數字替換爲/ *?* /,否則不會移動任何內容。你用strcpy混淆了memmove嗎? –

回答

0

最後一個參數到的memmove()是字節數來移動 - 在這種情況下11

+0

@Keith Thompson你知道第一個例子中應該有多少字節嗎? –

+0

@Mikemmm:你想做什麼? –

+0

@Keith Thompson我試圖左移一個數組的元素,並將其中的元素覆蓋在右邊,然後將右邊的所有元素都寫入它。有點像從隊列中刪除。 –

1

memmove第三個參數指定的字節數來移動,因此,在第二個實施例要移動11個字節。你的第一個例子不應該編譯,因爲你會在調用memmove的行上出現語法錯誤。

0

第三個參數定義要複製的字節數;在第一個示例中,您應該定義要複製的字節數。

+0

錯誤。 'str + 15'與'&str [15]'相同;這兩個表達式都是'char *'類型。 –

+0

編輯完成後,我刪除了我的downvote(雖然這對其他答案仍然是多餘的)。 –

+0

@Suroot是的,但我不知道我應該複製多少人。 –

相關問題