c - memcpy() 是否使用 realloc()?

标签 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, str, strlen(str));

    while(*buff) {
        printf("%c" , *buff++);
    }

    printf("\n");

    return 0;
}

此代码打印整个字符串“abc...xyz”。但是“buff”没有足够的内存来保存该字符串。 memcpy() 是如何工作的?它使用 realloc() 吗?

最佳答案

您的代码有未定义的行为。要回答您的问题,memcpy不使用 reallocsizeof(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/

相关文章:

c - 我的解决迷宫的代码进入无限循环

c++ - 如果他们定义了标准 ABI,C/C++ "lose"会是什么?

C 结构体和 union 在一起

c - 如何中断使用 fgets()、使用 scanf ("%s"读取的字符串,..)

java - 使用 NIO 缓冲区编码 UTF-8 时是否存在错误?

c - 从函数返回指向结构的指针

C:段错误:在 NetBeans (OS X) 上运行,但在 Linux 上不运行

c - 达到计数后将接收到的数据传递到缓冲区

c++ - 确定 FFMPEG 的 AVFrame 中数据 [0] 的大小

c++ - 我没有直接在我的程序中使用的 memcpy 偶尔崩溃