c語言strcpy、strncpy、memcpy內存拷貝比較
#include <stdio.h>
#include<string.h>
#include <assert.h>
void *my_memcpy(void *memTo, const void *memFrom, int size)
{
assert((memTo != NULL) && (memFrom != NULL));
char *tempFrom = (char *)memFrom;
char *tempto = (char *)memTo;
while (size-- > 0)
{
*tempto++ = *tempFrom++;
}
return memTo;
}
int main()
{
char *strSrc = "hello wrold";
char strDest[7] = {0};
strcpy(strDest, strSrc);
printf("strDest:%s\n", strDest);
char s1[] = "123";
char s2[] = "456";
s比d定義在前, 那麼s得到了高地址, 而d得到了相對低的地址
char s[] = "abcdefghi";
char d[] = "abc";
strcpy(d, s);
printf("d=%s,\ns=%s", d, s);
額外的NUL字節填充到len長度,如果strlen(src)的值大於或等於len,那麼只有len個字符被複制到dst中。
char message[] = "abcd";
strncpy(message, "abcde", 5);
printf("message:%s\n", message);
char message1[] = "abcdefghik";
strncpy(message1, "abe", 5);
printf("message1:%s\n", message1);
char message3[] = "abcdefghik";
strncpy(message3, "abe", 4);
printf("message3:%s\n", message3);
char message2[] = "abcdefghik";
strncpy(message2, "abe", 3);
printf("message2:%s\n", message2);
char message4[] = "abcdefghik";
strncpy(message4, "mnq", 2);
printf("message4:%s\n", message4);
char message5[] = "abcdefghik";
strncpy(message5+2, message5, 3);
printf("message5:%s\n", message5);
char message6[] = "abcdefghik";
memcpy(message6, "mnq", 2);
printf("message6:%s\n", message6);
char message8[] = "abcdefghik";
memcpy(message8, "mn", 2);
printf("message8:%s\n", message8);
char message7[] = "abcdefghik";
memcpy(message7, "abe", 5);
printf("message7:%s\n", message7);
return 0;
}