=Start=
缘由:
整理学习在进行Linux下C编程中碰到的一些知识点,方便以后进行参考。
正文:
参考解答:
void *memcpy(void *dest, const void *src, size_t n); // copies n bytes from memory area src to memory area dest./* */char *strcpy(char *dest, const char *src); // copies the string pointed to by src, including the terminating null byte ('\0'), to the buffer pointed to by dest.char *strncpy(char *dest, const char *src, size_t n); // similar to strcpy(), except that at most n bytes of src are copied |
&
int main(){ char *t = "Working on RedHat Linux"; char *s; s = malloc (8000 * sizeof(char)); memcpy(s, t, 7000); // memcpy(s, t, strlen(t) + 1); // memcpy(s, t, sizeof("Working on RedHat Linux")); printf("s = %s\nt = %s\n", s, t); free(s);}/*以上代码出现段错误的主要原因在于 指针t 指向的区域大小小于 7000 字节,但是 memcpy() 还是会去读取 指针t 指向字符串内容之后的内容(可能是不可读区域),所以引发段错误。建议在使用 memcpy() 时,源和目的都必须是可读的,同时最好也指定一个长度,防止越界。*/ |
&
#include <stdio.h>#include <string.h>void main(){ char a[30] = "string(1)"; char b[] = "string(2)"; printf("sizeof('%s') = %d\n", a, sizeof(a)); printf("sizeof('%s') = %d\n", b, sizeof(b)); printf("strlen('%s') = %d\n", b, strlen(b)); printf("before strcpy():%s\n", a); printf("after strcpy() :%s\n", strcpy(a, b)); // char *strcpy(char *dest,const char *src); // a[30] = "string(1)"; //warning: assignment makes integer from pointer without a cast strcpy(a, "string(1)"); printf("after strncpy(a, b, 6) :%s\n", strncpy(a, b, 6)); // char *strncpy(char *dest,const char *src,size_t n); strcpy(a, "string(1)"); printf("after strncpy(a, b, sizeof(b)) :%s\n", strncpy(a, b, sizeof(b))); strcpy(a, "string(1)"); printf("after strncpy(a, b, strlen(b)+1) :%s\n", strncpy(a, b, strlen(b)+1));} |
参考链接:
http://man7.org/linux/man-pages/man3/memcpy.3.html
C函数之memcpy()函数用法
http://blog.csdn.net/tigerjibo/article/details/6841531
memcpy滥用导致的「segmentation fault」
https://stackoverflow.com/questions/8703948/memcpy-function-in-c
字符串拷贝/赋值 除了在初始化的时候直接赋值外,在后期处理上需要使用 strcpy/strncpy 而不能直接用 = 赋值
http://www.iteedu.com/os/linux/linuxprgm/linuxcfunctions/memstring/strncpy.php
http://man7.org/linux/man-pages/man3/strcpy.3.html
https://linux.die.net/man/3/strcpy
为什么该使用 strncpy 而不是 strcpy
https://stackoverflow.com/questions/1258550/why-should-you-use-strncpy-instead-of-strcpy
=END=