背后的原因,我已经做了测试,其中就出现了这样的事情:这个输出
char* trim(char* strr, char* str1) {
char* s = strr;
while(*str1 == 32) str1++;
while((*str1 != 32) && (*str1 != 0))
*s++ = *str1++;
*s = 0;
return strr;
}
int main(void) {
char str[20] = "???";
char str1[20] =" bcd \0";
printf("(%s)\n(%s)\n", str, trim(str, str1));
return(0);
}
的问题是:什么上面的代码将打印,为什么?我对输出结果和原因有了一些线索,但我希望听到更多有经验的人士的意见。
乍一看,它看起来像它会打印:
(???)
(bcd)
但在现实中产生的输出是:
(bcd)
(bcd)
是不是你覆盖str? – 2013-04-09 23:50:27
@JaynathanLeung这个功能没有完成,我只是复制和过去。 – dreamcrash 2013-04-09 23:51:44
由于trim是一个参数并在printf之前运行,所以well str正在被修剪覆盖。 – 2013-04-09 23:52:40