strcpy
和 memcpy
都是 C 标准库中用于复制数据的函数,但它们的用途和行为有很大的不同。
strcpy
strcpy
用于复制以空字符结尾的字符串。它从源字符串复制字符到目标字符串,直到遇到空字符 ('\\0'
) 为止,并且会在目标字符串中添加一个空字符结尾。
语法:
char *strcpy(char *dest, const char *src);
参数:
dest
: 目标字符串指针src
: 源字符串指针
返回值: 返回 dest
指针
注意事项:
src
必须是以空字符结尾的字符串。dest
必须足够大,能够容纳源字符串的所有字符以及末尾的空字符。
示例:
#include <stdio.h>
#include <string.h>
int main() {
char src[] = "Hello, world!";
char dest[20];
strcpy(dest, src);
printf("Destination string: %s\\n", dest);
return 0;
}
memcpy
memcpy
用于复制指定数量的字节数据。它不考虑数据内容,因此可以用于任何数据类型的复制,包括非字符串数据。
语法:
void *memcpy(void *dest, const void *src, size_t n);
参数:
dest
: 目标内存指针src
: 源内存指针n
: 要复制的字节数
返回值: 返回 dest
指针
注意事项:
src
和dest
可以是任何类型的数据。memcpy
不会添加任何终止符,因此不会在字符串复制时自动添加空字符。
示例:
#include <stdio.h>
#include <string.h>
int main() {
char src[] = "Hello, world!";
char dest[20];
memcpy(dest, src, strlen(src) + 1); // +1 to include the null terminator
printf("Destination string: %s\\n", dest);
return 0;
}
总结
strcpy
用于复制以空字符结尾的字符串,并自动处理空字符。memcpy
用于复制任意类型的数据,按照指定的字节数进行复制,不会处理空字符。
使用时选择合适的函数:
- 处理字符串时,通常使用
strcpy
。 - 处理二进制数据或指定长度的数据时,使用
memcpy
。