#inlcude <stdio.h>
#inlcude <stdlib.h>
#inlcude <string.h>
int main() {
char *buff = (char*)malloc(sizeof(char) * 5);
char *str = "abcdefghijklmnopqrstuvwxyz";
memcpy (buff, str, strlen(str));
while(*buff) {
printf("%c" , *buff++);
}
printf("\n");
return 0;
}
此代码打印整个字符串“abc...xyz”。但是“buff”没有足够的内存来保存该字符串。 memcpy() 是如何工作的?它使用 realloc() 吗?
最佳答案
您的代码有未定义的行为。要回答您的问题,否,memcpy
不使用 realloc
。
sizeof(buf)
应该足以容纳 strlen(str)
。任何不足都是崩溃。
输出可能会打印出来,因为它是一个小程序,但在真正的大代码中,它会导致难以调试错误。将您的代码更改为,
const char* const str = "abcdefghijklmnopqrstuvwxyz";
char* const buff = (char*)malloc(strlen(str) + 1);
此外,不要执行*buff++
,因为您会丢失内存记录(您分配的内容)。在 malloc()
之后,一旦内存使用结束,就应该执行 free(buff)
,否则就是内存泄漏。
关于c - memcpy() 是否使用 realloc()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6092911/