sha*_*han 5 c buffer memcpy realloc
#inlcude <stdio.h>
#inlcude <stdlib.h>
#inlcude <string.h>
int main() {
char *buff = (char*)malloc(sizeof(char) * 5);
char *str = "abcdefghijklmnopqrstuvwxyz";
memcpy (buff, name, strlen(str));
while(*buff) {
printf("%c" , *buff++);
}
printf("\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
此代码打印整个字符串"abc ... xyz".但是"buff"没有足够的内存来容纳那个字符串.memcpy()如何工作?它使用realloc()吗?
iam*_*ind 10
您的代码具有未定义的行为.要回答你的问题,不,memcpy不使用realloc.
sizeof(buf)应足以容纳strlen(str).更少的是崩溃.
输出可能是打印的,因为它是一个小程序,但在真正的大代码中,它将导致难以调试错误.将您的代码更改为
const char* const str = "abcdefghijklmnopqrstuvwxyz";
char* const buff = (char*)malloc(strlen(str) + 1);
Run Code Online (Sandbox Code Playgroud)
另外,不要这样做,*buff++因为你将丢失内存记录(你分配的内容).一旦内存使用结束后malloc()应该做free(buff)一次,否则就是内存泄漏.
您可能会打印出整个字符串,但它不安全,您正在写入并读取未分配的内存.这会产生未定义的行为.
memcpy没有做任何内存分配.它只是读取和写入您提供的位置.它没有检查它是否可以,并且在这种情况下,如果您的程序没有崩溃,那么您很幸运.