C 不同位置函数调用的不同答案
我有以下代码:C 不同位置函数调用的不同答案,c,arrays,C,Arrays,我有以下代码: //function to delete the occurence of c in s void squeeze(char s[], int c) { int i,j; for(i=j=0;s[i]!='\0';i++) if(s[i]!=c) s[j++]=s[i]; s[j]='\0'; } //function to concatenate string void strca(char c[],char b[]){ int i,
//function to delete the occurence of c in s
void squeeze(char s[], int c) {
int i,j;
for(i=j=0;s[i]!='\0';i++)
if(s[i]!=c)
s[j++]=s[i];
s[j]='\0';
}
//function to concatenate string
void strca(char c[],char b[]){
int i,j;
i=j=0;
while(c[i]!='\0')
i++;
c[i++]=' ';
while((c[i++]=b[j++])!='\0')
;
}
现在,当我调用main()中的函数时
给出op:
删除第2行和第3行中的注释行并在第7行和第8行中添加注释时,我得到了:
我只是想知道为什么会出现这种差异,以及这种差异是如何产生的?提前谢谢
char f[]="Magnificent";
使数组f
刚好足够容纳字符串“华丽”
,包括0-终止符
char n[]="King Rex";
strca(f,n);
愉快地在数组边界之外写入,调用未定义的行为,并且显然在本例中覆盖了其他数组test
如果声明数组的大小足以容纳连接结果
char f[32] = "Magnificent";
例如,所有操作都将正常工作。您的连接函数写入c[]数组。如果要连接字符串,需要确保为两个字符串分配足够的内存(包括终止
\0
)
现在在您的示例中,很幸运f[]和n[]恰好在内存中相邻,所以当您用空格替换终止null时,它似乎是一个串联字符串
char f[]="Magnificent";
char n[]="King Rex";
strca(f,n);
char f[32] = "Magnificent";