strcpy()函数只能拷贝字符串。strcpy()函数将源字符串的每个字节拷贝到目录字符串中,当遇到字符串末尾的null字符(\0)时,它会删去该字符,并结束拷贝。
memcpy()函数可以拷贝任意类型的数据。因为并不是所有的数据都以null字符结束,所以你要为memcpy()函数指定要拷贝的字节数。
在拷贝字符串时,通常都使用strcpy()函数;在拷贝其它数据(例如结构)时,通常都使用memcpy()函数。以下是一个使用strcpy()函数和memcpy()函数的例子:
- #include <stdio.h>
- #include <string.h>
- typedef struct cust_str {
- int id ;
- char last_name [20];
- char first_name[15];
- } CUSTREC;
- void main (void)
- {
- char * src_string = "This is the source string" ;
- char dest_string[50];
- CUSTREC src_cust;
- CUSTREC dest_cust;
- printf("Hello! I'm going to copy src_string into dest_string!\n");
- /* Copy src_ string into dest-string. Notice that the destination string is the first argument. Notice also that the strcpy() function returns a pointer to the destination string. */
- printf("Done! dest_string is: %s\n",strcpy(dest_string, src_string));
- printf("Encore! Let's copy one CUSTREC to another. \n") ;
- printf("I'll copy src_cust into dest_cust. \n");
- /* First, intialize the src_cust data members. */
- src_cust. id = 1 ;
- strcpy(src_cust. last_name, "Strahan");
- strcpy(src_cust. first_name, "Troy");
- /* Now, Use the memcpy() function to copy the src-cust structure to the dest_cust structure. Notice that, just as with strcpy(), the destination comes first. */
- memcpy(&dest_cust, &src_cust, sizeof(CUSTREC));
- printf("Done! I just copied customer number # %d (%s %s)." ,dest_cust. id, dest_cust. first_name, dest_cust. last_name) ;
- }