将子数组复制到另一个数组中

时间:2017-06-13 02:54:43

标签: c arrays

#include<stdio.h>
int copy(char d[],char e[],int n);
int main(void)
{

    char a[20]="Nice to meet you";
    char b[10];
    copy(a+5,b,4);
    return 0;
}

int copy(char d[],char e[],int n)
{
 for(int i=0;i<n;i++)
   {
    e[i]=d[i];
   }
 printf("%s\n",e);
 return 0;
}

此处d指向a+5e指向b。在这里,我理解输出将是“to m”。 我的问题是:在copy函数中,如果我将i初始化为1n-1而不是0n-1,为什么会这样?没有给出所需的输出? 我希望新输出为“o m”。

1 个答案:

答案 0 :(得分:2)

如果您使用i中的copy1循环到n - 1,那么在copy(a + 5, b, 4)中调用main之后b[0]仍然是未初始化的,因此访问它是未定义的行为(您不确定b中的字符串是否以'\0'结尾)。即使不是,它仍然会存在;要打印“om”,您必须从b + 1开始阅读,或者在copy e[i - 1] = d[i]中执行作业(如果你要去的话,请务必将其终止)将其视为字符串之后,或将其视为以空字符结尾的字符串将其读取到未初始化的区域并同样调用未定义的行为。)