关于C语言中字符串拷贝的问题,为何要将拷贝后的字符串后一位变成''

Python020

关于C语言中字符串拷贝的问题,为何要将拷贝后的字符串后一位变成'',第1张

因为对字符串的解析是从头开始,直到遇见第一个'\0'结束的。否则的话,计算机如何知道一个字符串有多长呢?

之所以使用i<=n,就是为了将那个结束符也拷贝过去,否则输出str2的时候,会一直输出直到遇见第一个'\0',也就是越界了。至于输出的为什么是'烫',因为越界后内存中的数是随机的,可能会被解析为汉字~~

函数原型为:

void *memcpy(

void *dest,

const void *src,

size_t count

)

其中:

dest:

目标内存缓冲区

src:

源内存缓冲区

count:

需要拷贝的字节数

通过memcpy()函数无法确定目标缓冲区的大小,目标缓冲区一般是一个已分配好空间的指针,在分配该空间时一般要先考虑源内存缓冲区的大小,宁愿多分配些空间(即,一般都要分配得比源缓冲区大),第三个参数为源缓冲区中实际需要拷贝的数据的字节数.

#include<stdio.h>

main(){

char a[200]="abcdefghijklmn"

char b[200]

char *p1=a,*p2=b

int n

printf("原字符串为:\n%s\n",a)

printf("输入n:")

scanf("%d",&n)

do{

*p2=*p1+(n-1)*sizeof(char)

*p2++

*p1++

}while(*p1!='\0')

printf("复制的字符串:\n%s\n",b)

getch()

}