strcpy复值的过程

为什么用strcpy复值完原来的长度会改变可是为什么读取数组的时候那被覆盖的它还在

img

在c语言里,字符串和字符数组就是一个东西
字符串以0结尾,当你以字符串方式输出时,遇到0,后面就被截断了
而当你以数组方式遍历时,当然不会管里面到底是什么值,无脑打印

这个你要看strcpy的原理了,另外,你开始定义的变量c,和v的个数不够也会影响结果的。

这个问题应该看一下strcpy函数的原型:

char* strcpy(char* des,const char* source)
{
  char* r=des;
  assert((des != NULL) && (source != NULL));
  while((*r++ = *source++)!='\0');
  return des;
}

可以看到strcpy复制到'\0'作为结束,而strlen统计数组大小也是统计到字符串结束符'\0'作为结束,因此复制前后strlen(c)的大小会变。在读取数组时,内存始终存在,每一个数组元素无论是存放字符'\0'还是其他字符,都是存在的,所以一直能读到。