编写C++程序,实现strcpy()功能

在网上看到这道题,编写程序如下:

代码1:

char *cpystr(char *des,const char *src)
{
int i = 0;
if (NULL == des || NULL == src)
return NULL;
while (src[i] != '\0')
{
des[i] = src[i];
i++;
}

return des;
}

1.这样写可以实现复制功能,只是C/C++语法有一个漏洞,支持const char*向char *的默认转换,如果调用

cpystr()时这样写:cpystr("hello","hello");可以编译通过(在VS2013下测试)。运行会发生段错误。

为避免这个错误,可以定义一个函数如下:、

char *cpystr(const char *des,const char *src)

  printf("error:the first arg can't be const\n");

  exit(0);

如果知识声明char *cpystr(const char *des,const char *src);而不对该函数进行定义,会发生错误,

“ error LNK2019: 无法解析的外部符号 "char * __cdecl cpystr(char const *,char const *)" (?cpystr@@YAPADPBD0@Z),

该符号在函数 _main 中被引用。”

 2.上面说的,给cpystr(char *des,const char *src)传参cpystr("hello","hello"),会将第一个参数的第一个参数const char *转换为

char *,编译可以通过。需要利用函数重载另定义一个函数cpystr(const char *des,const char *src)来解决。

代码2:

const char *a = "hello";
char *b = a;

代码2在VS2013下不能编译通过,显示error C2440: “初始化”: 无法从“const char *”转换为“char *”

 

3.上面的代码1和代码2写成C语言编译的结果和C++编译的结果是一样的(用gcc做的测试),可惜C语言无法进行函数重载来避免这个错误。

posted @ 2015-05-09 09:35  gazebo  阅读(1433)  评论(0编辑  收藏  举报