2015-02-24 128 views
-1

Memcpymemcmp函數可以帶一個指針變量嗎?Memcpy func帶指針變量? char * p; char * q;的memcpy(P,Q,10);它會起作用嗎?

char *p; 
char* q; 
memcpy(p,q,10); //will this work? 
memcmp(p,q,10); //will this work? 
+1

什麼阻止你嘗試它? – 2015-02-24 14:06:48

+0

如果將內存分配給目標指針 – Gopi 2015-02-24 14:07:09

+0

「memcpy」的第一個和第二個參數是指針。你還指望他們是什麼人?你有沒有讀過'memcpy'的文檔? – 2015-02-24 15:12:47

回答

1

不,你的代碼寫的都不行,因爲你傳遞未初始化的指針memcpy()(和memcmp(),但memcpy()電話就夠了)。這將導致未定義的行爲,因爲您不允許從這些「隨機」位置讀取/寫入。

您可以通過確保指針是有效的,例如解決它:

char buf[10], *p = buf; 
const char *q = "hello hello"; 

memcpy(p, q, 10); 
printf("the copying made the buffers %s\n", 
    memcmp(p, q, 10) == 0 ? "equal" : "different"); 

當然p可以通過只是普通buf上面所取代。

+0

我明白了,但下面這個工作嗎?char * p =「buf」; const char * q =「hello hello」; memcpy(p,q,10); printf(「複製緩存%s \ n」, memcmp(p,q,10)== 0?「equal」:「different」); – Dev 2015-02-24 14:54:35

+0

不,這是未定義的行爲,因爲字符串文字居住在只讀內存中。這就是爲什麼我使用'char'數組作爲目的地。 – unwind 2015-02-24 14:56:16

+0

現在確定它在memcpy()的情況下非常清楚.. memcmp()在這方面也如此我們至少需要使用至少一個數組參數? – Dev 2015-02-24 17:23:57