自己编写的C++复制字符串小问题~~~~
来源:百度知道 编辑:UC知道 时间:2024/05/16 00:12:40
#include <iostream>
using namespace std;
void copystr(char *, char *);
int main(void)
{
char *str1 = NULL, *str2 = "abc";
copystr(str1, str2);
cout << str1 << endl;
return 0;
}
void copystr(char *p1, char *p2)
{
while(*p2 != '\0')
*p1++ = *p2++;
*p2 = '\0';
}
原本是想把STR2中的字符串连同结尾的'\0'一起复制到STR1中..实现类似C语言的strcpy函数的原理....虽然我后来自己变通了一下程序可以顺利实现复制...但是想知道上面我第一次写的程序为什么不能运行?(一运行就出现类似指针非法修改某区间内存的问题~~~)...我只是想知道详细的出错原因..谢谢大家
不好意思,刚才是我大错了,*p2 = '\0'一句应该是*p1 = '\0'才对..
using namespace std;
void copystr(char *, char *);
int main(void)
{
char *str1 = NULL, *str2 = "abc";
copystr(str1, str2);
cout << str1 << endl;
return 0;
}
void copystr(char *p1, char *p2)
{
while(*p2 != '\0')
*p1++ = *p2++;
*p2 = '\0';
}
原本是想把STR2中的字符串连同结尾的'\0'一起复制到STR1中..实现类似C语言的strcpy函数的原理....虽然我后来自己变通了一下程序可以顺利实现复制...但是想知道上面我第一次写的程序为什么不能运行?(一运行就出现类似指针非法修改某区间内存的问题~~~)...我只是想知道详细的出错原因..谢谢大家
不好意思,刚才是我大错了,*p2 = '\0'一句应该是*p1 = '\0'才对..
首先str1不能少于str2,所以应该先给str1一个初始化空间
比如char *str1=newchar[5]
然后在最后str2没动,它的最后就是正常的结束'\n',应该是str1的最后要加个'\n'
所以*p2 = '\0'; 应该改成*p1 = '\0';
然后就行了
不能用while 吧
他是个循环来的拉
单步跟着调试一下就知道了