一个简单的字符分割函数引发的思考。
char * SegStr1(const char * pSrc,int n)
{
int nLen = strlen(pSrc);
char ptrSrc[256] = {0};
char *pSeg = ptrSrc;
for (int n = 0;n<nLen;n++)
{
*pSeg++ = pSrc[n];
if ((n+1)%3 ==0)
{
*pSeg++ = ' ';
}
}
return ptrSrc;
}
char * SegStr2(const char * pSrc,int n)
{
int nLen = strlen(pSrc);
char ptrSrc[256] = {0};
//char *pSeg = ptrSrc;
for (int n = 0;n<nLen;n++)
{
//*pSeg++ = pSrc[n];
*ptrSrc++ = pSrc[n];
if ((n+1)%3 ==0)
{
//*pSeg++ = ' ';
*ptrSrc++ = ' ';
}
}
return ptrSrc;
}
SegStr2函数会报错:error C2105: “++”需要左值。
为什么会出现这种情况?
此错误说明SegStr2中的自增操作是错误的,是对常量的自增。而SegStr1则不会发生此错误说明SegStr1中的自增操作是对变量的操作。
由此引出char数组和指针的区别:
ptrSrc数组存储的内容存放在堆或者栈中,是可以进行修改的;但是整个数组的地址(和&ptrSrc[1]相等)存放在常量区是不可以修改的。
pSeg指针存储的内容是存放在常量区的不可以进行修改,但是pSeg本身是存放在常量区的不可以进行修改。
char *pSeg = ptrSrc; pSeg的指针指向ptrSrc数组,对pSeg指针进行操作就可以对ptrSrc进行依次赋值。
本文制作简单阐释,详细区别可参考此博文。
https://blog.youkuaiyun.com/yahohi/article/details/7427724