編寫C++程式,實現strcpy()功能

來源:互聯網
上載者:User

標籤:

在網上看到這道題,編寫程式如下:

代碼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 *)" ([email protected]@[email protected]),

該符號在函數 _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語言無法進行函數重載來避免這個錯誤。

編寫C++程式,實現strcpy()功能

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.