2015-02-10 34 views
-2

我將char*複製到char*並將其取回,並將其取回cout它。爲什麼控制檯在memcpy之後出現了一些錯誤的字母*

char buffer[100] = { 0 }; 
char* name = "foo"; 
int bar = 12345; 
memcpy(buffer, &(bar), 4); 
memcpy(buffer + 4, name, 3); 

int result = 0; 
memcpy(&result, buffer, 4); 

char backname[3]; 
memcpy(backname, buffer + 4, 3); 

std::cout << result << std::endl; 
std::cout << backname << std::endl; 

它爲什麼會顯示此:

12345 
foo╠╠╠╠╠╠╠╠╠90 

strcmp(backname,"foo")確實讓我知道它們是否匹配?


編輯:

enter image description here

+0

是,它讓我知道,正確的值是'backname'it裏面只是顯示一些錯誤否則我不會問這樣的問題。 – BennX 2015-02-10 18:15:09

回答

2

事我會解決:

  1. 使用sizeof(int)而不是4。這很可能不是真正的問題。

  2. backname與您使用它的方式不是以null結尾的字符串。用途:

    char backname[4] = {0}; 
    memcpy(backname, buffer + sizeof(int), 3); 
    
+0

感謝您的回答。所以,如果char *末尾沒有null,它會打印一些內存的東西?所以最後我還需要一個char,最後是0? – BennX 2015-02-10 18:20:43

+2

是的。如果在字符串末尾沒有空值,那麼您將訪問超出界限的內存,這會導致未定義的行爲。 – 2015-02-10 18:21:46

+0

非常感謝clearence。我想知道爲什麼strcmp工作正確。 – BennX 2015-02-10 18:22:43

相關問題