标准的strcpy实现语句中有这样的一句
while((*a++ = *b++) != “\0”);
这样在判断b字符串到达”\0″时就跳出循环,但是这里是不是没有将”\0″复制给a?
在结束后能否要加上一句 *a = “\0″来给a字符串手动加上一个结束字符?
或是在创建a的时候初始化了,如memset(a,0,size)这样,也可以?
while((*a++ = *b++) != “\0”);
这样在判断b字符串到达”\0″时就跳出循环,但是这里是不是没有将”\0″复制给a?
在结束后能否要加上一句 *a = “\0″来给a字符串手动加上一个结束字符?
或是在创建a的时候初始化了,如memset(a,0,size)这样,也可以?
解决方案
16
假设b此时已经指向了最后一个字符(例如”abcde”中的e)
那么*a++ = *b++将”e”赋值给a,此时判断”e”!=”\0″为真,然后继续循环
然后b指向了”\0″,将”\0″赋值给a了
那么*a++ = *b++将”e”赋值给a,此时判断”e”!=”\0″为真,然后继续循环
然后b指向了”\0″,将”\0″赋值给a了
16
(*a++ = *b++) != “\0” 是先赋值,才进行判断
4
创建a的时候一般都建议要初始化才行,避免出现意外