练习使用memcpy或strncpy将字符串复制到内存中

问题描述 投票:0回答:1

我正在写一个简单的练习来比较 memcpy 或 strncpy 的用法。我发现我可以使用这两个函数之一来完成此字符串复制:

char * strncpy ( char * destination, const char * source, size_t num );

void * memcpy ( void * destination, const void * source, size_t num );

简单练习

    char src[] = "Hello World";
    char dst[20];

    strncpy(dst, src, 5);
    printf("%zu-", strlen(dst));

    memcpy(dst, src, sizeof(dst));
    printf("%zu-", strlen(dst));

    strncpy(dst, src, 5);
    printf("%zu", strlen(dst));

实际输出

5-11-11

我如何理解他们在尊重方面的不同行为?

一般来说,如何找出使用 memcpy 或 strncpy 复制的不同内存块的相对字节?

c string copy
1个回答
-1
投票
如果空间不足,

strncpy
不会添加 NUL。

由于

strlen
需要一个以 NUL 结尾的字符串,因此第一次使用 strlen 会导致未定义的行为。

你想要

strncpy(dst, src, 5);
dst[5] = 0;
printf("%zu\n", strlen(dst));
© www.soinside.com 2019 - 2024. All rights reserved.