关于自定义的strcpy

来源:百度知道 编辑:UC知道 时间:2024/06/25 16:26:42
#include "stdafx.h"
#include "iostream"
using namespace std;

char* astrcpy(char* dest, const char* src)
{
char* pdest=dest;
char* psrc=(char*)src;
while((*pdest++ = *psrc++)!='\0');
return dest;
}

void _tmain(int argc, _TCHAR* argv[])
{
char* p1="whosrdhjkggh";
char* p2="window";
astrcpy(p1,p2);
system("pause");
}

为什么运行时总会出现Access violation writing location 0x00417810的错误信息,想了很久,不知道错在什么地方了。
to 我sun摆渡 :
谢谢你的回答,但是问题可能不在这里,因为const char* src不能直接赋给char* psrc,必须做显示转化。。。
如果你觉得是这个问题,那么应该怎么改呢?

因为你的p1没有对应的空间,它指向的是字符串常量区
调用这个函数相当于把字符串赋值到常量区去,所以报错

把char* p1="whosrdhjkggh";
改成 char p1[50]="whosrdhjkggh";或者new一个空间就好了

函数没问题
非要说的话,有些地方可以稍稍改进一下

#include "iostream"
using namespace std;

char* astrcpy(char* dest, const char* src)
{
if(src&&dest)
{
char *temp=dest;
while(*temp++=*src++);
}
return dest;
}
int main()
{
char p1[50]="whosrdhjkggh";
char* p2="window";
astrcpy(p1,p2);
cout <<p1;
system("pause");
}

(char*)src这个不对····