我的 memcpy 函数意外地打印了 src 两次
My memcpy function prints the src twice unexpectedly
https://onlinegdb.com/B1OmLVB6D
我不确定为什么 src 变量在 运行 memcpyByByte 函数后打印两次。
int memcpyByByte(void* src, void* dest, size_t len) {
char* srcC = (char*)src;
char* destC = (char*)dest;
for(int i = 0; i< len; i++){
*(destC+i) = *(srcC+i);
}
}
int main()
{
char a[10] = "1234567890";
char b[10] = "6b";
memcpyByByte(&a, &b, sizeof(a));
printf("src: %s\n", a);
printf("dest: %s", b);
return 0;
}
C 字符串在末尾有一个隐含的值为 0 (NULL) 的终止字节。
字符串 "1234567890"
的大小是 11,而不是 10。
赋给10元素长数组会导致终止符丢失。因此 printf()
会在 a
之后继续扫描内存,可能会打印 b
.
的内容
只需将 a
和 b
的大小更改为 11
。或者让编译器决定大小:
char a[] = "1234567890";
char b[sizeof a] = "6g";
https://onlinegdb.com/B1OmLVB6D
我不确定为什么 src 变量在 运行 memcpyByByte 函数后打印两次。
int memcpyByByte(void* src, void* dest, size_t len) {
char* srcC = (char*)src;
char* destC = (char*)dest;
for(int i = 0; i< len; i++){
*(destC+i) = *(srcC+i);
}
}
int main()
{
char a[10] = "1234567890";
char b[10] = "6b";
memcpyByByte(&a, &b, sizeof(a));
printf("src: %s\n", a);
printf("dest: %s", b);
return 0;
}
C 字符串在末尾有一个隐含的值为 0 (NULL) 的终止字节。
字符串 "1234567890"
的大小是 11,而不是 10。
赋给10元素长数组会导致终止符丢失。因此 printf()
会在 a
之后继续扫描内存,可能会打印 b
.
只需将 a
和 b
的大小更改为 11
。或者让编译器决定大小:
char a[] = "1234567890";
char b[sizeof a] = "6g";