我正在写一个简单的练习来比较 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 复制的不同内存块的相对字节?
strncpy
不会添加 NUL。
由于
strlen
需要一个以 NUL 结尾的字符串,因此第一次使用 strlen 会导致未定义的行为。
你想要
strncpy(dst, src, 5);
dst[5] = 0;
printf("%zu\n", strlen(dst));