请问两个有关问题
请教两个问题
第一个问题
第二个问题:
拜托各位大牛了
------解决方案--------------------
问题1应该两个都多copy了一个'\0'
------解决方案--------------------
就如LS的LS所说。
------解决方案--------------------
1、关键在++P,和P++的区别,一个是先移动指针再做运算(比如拷贝),一个是先运算再移动指针。
2、因为你没有复制最后的字符串结束符,在打印的时候会造成内存访问越界,造成乱码。具体原因是访问字符串内存时是以'\0'结束访问的。
希望可以帮到你!
------解决方案--------------------
设个断点,看看串结束点的指针指向何处
------解决方案--------------------
第一个问题,出现不同的原因是字符串遇到'\0'就会结束,字符串二不会覆盖字符串一,输出的是字符串一的内容即pTemp中存在两个'\0',最后只输出字符串一。而使用for循环,第二个for把第一个字符串的'\0'覆盖了,所以会正确。
第二个问题没看明白你要做什么。
第一个问题
- C/C++ code
pTemp = (char *)malloc(nLen * sizeof(char)); // 生成一个足够容纳pSrc1和pSrc2的buffer while((*pTemp++ = *pSrc1++) != '\0') ; while((*pTemp++ = *pSrc2++) != '\0') ; //用这段代码实现不了字符串连接的功能, pSrc2的内容会覆盖掉pTemp里的pSrc1的内容 for (; (*pTemp = *pSrc1) != '\0'; ++pTemp, ++pSrc1) ; for (; (*pTemp = *pSrc2) != '\0'; ++pTemp, ++pSrc2) ; //这段代码则可以正常工作何解?
第二个问题:
- C/C++ code
pSrc = pSrc + nPos - 1; for (; (*pTmp = *pSrc) != '\0'; ++pTmp, ++pSrc) ; //可以正常工作 for (nPos; nPos < nTimes; ++nPos) //nTime = 需要循环的次数 - nPos; { *pTmp++ = *(pSrc+nPos-1); } //如果上述代码在同一个上下文中 (循环的次数相等, 其它条件也是一样的), 这段代码也能复制到想要的字符串,但是用printf输出 结构后面出现了"驱驱驱驱驱驱" 比如:"Moto 驱驱驱驱驱驱" 何解?
拜托各位大牛了
------解决方案--------------------
问题1应该两个都多copy了一个'\0'
------解决方案--------------------
就如LS的LS所说。
------解决方案--------------------
1、关键在++P,和P++的区别,一个是先移动指针再做运算(比如拷贝),一个是先运算再移动指针。
2、因为你没有复制最后的字符串结束符,在打印的时候会造成内存访问越界,造成乱码。具体原因是访问字符串内存时是以'\0'结束访问的。
希望可以帮到你!
------解决方案--------------------
设个断点,看看串结束点的指针指向何处
------解决方案--------------------
第一个问题,出现不同的原因是字符串遇到'\0'就会结束,字符串二不会覆盖字符串一,输出的是字符串一的内容即pTemp中存在两个'\0',最后只输出字符串一。而使用for循环,第二个for把第一个字符串的'\0'覆盖了,所以会正确。
第二个问题没看明白你要做什么。