2015-02-10 75 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

相关问题