memmove and memcpy
字符串的拷贝函数memmove and memcpy,有什么区别?
来自MSDN上的:
1.memmove:
Copies count bytes (wmemmove) or characters (wmemmove) from src to dest. If some regions of the source area and the destination overlap, both functions ensure that the original source bytes in the overlapping region are copied before being overwritten.
2.memcpy:
memcpy copies count bytes from src to dest; wmemcpy copies count wide characters (two bytes). If the source and destination overlap, the behavior of memcpy is undefined. Use memmove to handle overlapping regions.
当src和 dest有重叠区域时,用memmove可以实现字符串的拷贝,但是另外一个函数memcpy却不可完成。
memmove 的效率低于memcpy。
3.在利用memmove and memcpy进行字符串拷贝时,要注意源字符串的长度,即要把源字符串的'/0'字符拷贝进去。
[/code="c++']
/* memcpy example */
#include <stdio.h>
#include <string.h>
int main ()
{
char str1[]="Sample string";
char str2[40];
char str3[40];
memcpy (str2,str1,strlen(str1)+1);
memcpy (str3,"copy successful",16);
printf ("str1: %s\nstr2: %s\nstr3: %s\n",str1,str2,str3);
return 0;
}
输出:
str1: Sample string
str2: Sample string
str3: copy successful
代码修改如下:
[/code="c++']
/* memcpy example */
#include <stdio.h>
#include <string.h>
int main ()
{
char str1[]="Sample string";
char str2[40];
char str3[40];
memcpy (str2,str1,strlen(str1));
memcpy (str3,"copy successful",15);
printf ("str1: %s\nstr2: %s\nstr3: %s\n",str1,str2,str3);
return 0;
}
输出为:
str1: Sample string
str2: Sample string烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫蘏ample string
str3: copy successful烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫蘏ample string烫烫烫烫烫烫
烫烫烫烫烫烫烫烫烫烫烫蘏ample string
原因何在?
memcpy (str2,str1,strlen(str1));这句只是拷贝了Sample string,并没有拷贝字符串的结束符号'\0',才导致此结果。
分享到:
相关推荐
`memmove()`函数用于将内存从一个位置移动到另一个位置,即使这两个位置重叠也能正确处理。 **参数说明**: - `destination`: 指向目标内存区域的指针。 - `source`: 指向源内存区域的指针。 - `num`: 要移动的字节...
例如,如何使用memchr、memmove和memcpy函数来实现字符串的处理? 2. 嵌入式Linux内存管理:在嵌入式Linux系统中,内存管理是非常重要的。例如,如何使用malloc和free函数来管理内存? 三、POSIX标准 1. UNIX编译...
2.14.5 memmove 2.14.6 memset 2.14.7 strcat 2.14.8 strncat 2.14.9 strchr 2.14.10 strcmp 2.14.11 strncmp 2.14.12 strcoll 2.14.13 strcpy 2.14.14 strncpy 2.14.15 strcspn 2.14.16 strerror 2.14...
`strcpy`, `strncpy`, `strcat`, `strncat`, `strcmp`, `strncmp`, `strchr`, `strrchr`, `strlen`, `strnlen`, `strpbrk`, `strtok`, `memset`, `bcopy`, `memcpy`, `memmove`, `memcmp`, `memscan`, `strstr`, `...
**memset**、**bcopy**、**memcpy**、**memmove**、**memcmp** 和 **memscan**:内存操作函数。 ```c char buffer[100]; memset(buffer, 'x', 10); // 将前10个字符设置为'x' bcopy(src, dest, 10); // 复制10个字节...
- **`memset`, `bcopy`, `memcpy`, `memmove`**: 内存操作函数。 - **`memcmp`, `memscan`**: 内存比较和扫描。 - **`strstr`, `memchr`**: 查找子字符串和字符。 **3.3 Bit Operations 位操作** 位操作在内核编程...
6. 数组和指针操作(Array and Pointer Operations):`memcpy` 和 `memmove` 用于内存块的复制,`memcmp` 比较两段内存区域,`memset` 将内存区域设置为特定值。 7. 文件操作(File Handling):`fopen` 打开文件...
- **`memcpy`**:复制内存区域。 - **`memmove`**:移动内存区域。 - **`memcmp`**:比较内存区域。 - **`memscan`**:扫描内存区域。 - **`strstr`**:查找子字符串的位置。 - **`memchr`**:在内存区域中查找第一...
- **memmove**: 移动内存区域。 - **memcmp**: 比较两个内存区域。 - **memscan**: 扫描内存区域直到找到非零值。 - **strstr**: 查找子字符串。 - **memchr**: 查找字符在内存中的位置。 **3.3 Bit Operations 位...
8. **标准库辅助函数(Utility Functions)**:memset、memcpy、memmove用于块内存操作,strtok分割字符串,strstr查找子字符串。 9. **控制流(Control Flow)**:exit退出程序,abort强制异常终止,setjmp/...
- **`memmove`**: 移动内存区域。 - **`memcmp`**: 比较两个内存区域。 - **`memscan`**: 扫描内存区域直到找到非零值。 - **`strstr`**: 查找字符串中的子字符串。 - **`memchr`**: 查找内存区域中的第一个匹配字符...
9. 其他实用函数:`memcpy`、`memmove` 用于内存块的复制,`assert` 用于调试,`printf` 家族用于格式化输出。 通过《C语言库函数使用手册》,读者可以深入理解每个函数的工作原理,了解如何正确地使用它们来解决...
10. 标准库还包括其他实用函数,如`exit`结束程序,`system`执行系统命令,`getchar`和`putchar`处理单个字符输入输出,`memcpy`和`memmove`用于内存块的拷贝。 了解和熟练使用C库函数是C编程的基本功。"C库函数速...
6. **指针操作函数**:如memcpy、memmove、memset等,用于内存区域的复制、移动和填充。 7. **错误处理和诊断函数**:如errno、perror、assert等,帮助开发者识别和调试程序错误。 8. **标准库函数**:如stdlib.h...
7. **Memory Management**:除了`malloc`和`free`外,glibc还提供了`calloc`一次性分配并初始化内存,`realloc`调整已分配内存的大小,以及`memcpy`、`memmove`和`memset`等内存操作函数。 8. **Thread and Process...
5. 数组和指针操作函数:如`memcpy`和`memmove`用于复制内存块,`memcmp`比较内存区域。这些函数在`<string.h>`中定义,与指针操作密切相关。 6. 流I/O函数:`fopen`打开文件,`fclose`关闭文件,`fread`和`fwrite`...
5. **内存管理**:C语言提供了内存管理的库函数,如`calloc`分配并初始化内存,`realloc`调整已分配内存的大小,`memcpy`和`memmove`用于内存块的复制。 6. **控制流函数**:`<stdbool.h>`定义了布尔类型,`...
- `<memmove()`、`memcpy()`和`memset()`分别用于安全地移动内存块、复制内存块和填充内存区域。 5. **输入/输出** - 文件操作函数如`fopen()`打开文件,`fclose()`关闭文件,`fread()`和`fwrite()`读写文件内容...
3. **指针相关函数**:C语言中,指针是其强大特性之一,与之相关的函数有`malloc`, `free`等内存分配和释放函数,以及`memcpy`, `memmove`等内存操作函数。 4. **I/O函数**:用于文件操作的函数,如`fopen`, `...