关于网友提出的“ 关于strcat和自加的问题~”问题疑问,本网通过在网上对“ 关于strcat和自加的问题~”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 关于strcat和自加的问题~
描述: 我写了一个strcat()的函数~有两个地方不明白?希望高手能帮我解决一下~~谢谢
1、A处和B处这两种写法有什么区别?为什么用A处的不能输出正确结果?
2、C处这样写为什么可以?
如下:
#include
#include
char *strcat (char *strDest, const char *strSrc)//const for pointer no data
{
char *address=strDest;
assert(strDest!=0 && strSrc!=0);
/*
while(*strDest++) //A
{
}
*/
while(*strDest!='\0') strDest++; //B
while(*strDest++= *strSrc++) //C
{
}
return address;
}
void main()
{
char dest[20]="abc";
char *src="defg";
strcat(dest, src);
printf("%s", dest);
}
解决方案1: //B中的strDest++; 在最后一次循环中没得到执行,所以两次的程序不一样。
解决方案2: 你的程序是不是A or B + C?
A或者B目的是查找dest的‘/0’(或者说将指针移到字符串尾部)?
A与B的区别是*和++的优先级的问题,*要小于++,A先移才比较,B是比较才移,当然不同咯。
解决方案3:
while(*strDest++) //A
{
;//
}
//跳出之后strDest指向'\0'的下一个字符,所以相当于'\0'没有被跳过
//假设char a[100] = "123", b[] = "456";
//则执行楼主的函数strcat(a, b);之后a[] = {'1', '2', '3', '\0', '4', '5', '6', '\0'};
注意'3'后面的'\0';
解决方案4:
while(*strDest++) //A
{
;//
}
//跳出之后strDest指向'\0'的下一个字符,所以相当于'\0'没有被跳过
以上介绍了“ 关于strcat和自加的问题~”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2777263.html