#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+5
,e
指向b
。在这里,我理解输出将是“to m
”。
我的问题是:在copy
函数中,如果我将i
初始化为1
到n-1
而不是0
到n-1
,为什么会这样?没有给出所需的输出?
我希望新输出为“o m
”。
答案 0 :(得分:2)
如果您使用i
中的copy
从1
循环到n - 1
,那么在copy(a + 5, b, 4)
中调用main
之后b[0]
仍然是未初始化的,因此访问它是未定义的行为(您不确定b
中的字符串是否以'\0'
结尾)。即使不是,它仍然会存在;要打印“om”,您必须从b + 1
开始阅读,或者在copy
e[i - 1] = d[i]
中执行作业(如果你要去的话,请务必将其终止)将其视为字符串之后,或将其视为以空字符结尾的字符串将其读取到未初始化的区域并同样调用未定义的行为。)