为什么控制台在 char* 的 memcpy 之后会输出一些错误的字母
Why does the console cout some wrong letters after memcpy of a char*
我将一个 char*
复制到一个 char*
并将其取回并 cout
它。
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")
让我知道他们匹配吗?
编辑:
我要解决的问题:
使用 sizeof(int)
而不是 4
。这很可能不是真正的问题。
backname
不是您使用的以空字符结尾的字符串。使用:
char backname[4] = {0};
memcpy(backname, buffer + sizeof(int), 3);
我将一个 char*
复制到一个 char*
并将其取回并 cout
它。
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")
让我知道他们匹配吗?
编辑:
我要解决的问题:
使用
sizeof(int)
而不是4
。这很可能不是真正的问题。backname
不是您使用的以空字符结尾的字符串。使用:char backname[4] = {0}; memcpy(backname, buffer + sizeof(int), 3);