memcpy()是否使用realloc()?

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)一次,否则就是内存泄漏.


sje*_*397 8

您可能会打印出整个字符串,但它不安全,您正在写入并读取未分配的内存.这会产生未定义的行为.

memcpy没有做任何内存分配.它只是读取和写入您提供的位置.它没有检查它是否可以,并且在这种情况下,如果您的程序没有崩溃,那么您很幸运.