1. 程式人生 > >不呼叫C/C++的字串庫函式,請編寫函式strcpy

不呼叫C/C++的字串庫函式,請編寫函式strcpy

已知strcpy函式的原型是

       char *strcpy(char *strDest, const char *strSrc);

       其中strDest是目的字串,strSrc是源字串。

(1)不呼叫C++/C的字串庫函式,請編寫函式 strcpy

char *strcpy(char *strDest, const char *strSrc)

{

    assert((NULL!=strDest) && (NULL!=strSrc));    // 2分

    char *address = strDest;                                          // 2分

    while( (*address++ = * strSrc++) != '\0' )         // 2分

              NULL ;

    return strDest;                                                  // 2分

}

首先是斷言的使用,我自己習慣了直接用if判斷兩個是否為空,然後也沒有做異常處理。其次是在內部重新定義一個新指標等於strDest,這樣當返回strDest的時候,指標不是指向最後一個\0字元了。細節啊,while( (*strDest++ = * strSrc++) != '\0'

 )這裡其實很多人看不出來,把最後的\0也拷貝過來了,這也是必須的。關於NULL!=strDest這個NULL最好放在前面的習慣,這個參考C++程式設計規範吧,個人習慣。


相關推薦

呼叫C/C++的字串函式編寫函式strcpy

已知strcpy函式的原型是        char *strcpy(char *strDest, const char *strSrc);        其中strDest是目的字串,strS

C++ 建構函式解構函式中能否呼叫虛擬函式

牛客網 ------------------- ------------------- ------------------- 設計模式 ------------------- -------------------

c++的建構函式極其呼叫(無參建構函式有參建構函式拷貝建構函式

1.c++編譯器會自動呼叫建構函式//建構函式(與類名相同) //解構函式:沒有引數也沒有任何返回型別,被自動呼叫 #include<iostream> using namespace std; class Test { public: Test();//無參建

C++結構體:預設建構函式複製建構函式過載=運算子

C++結構體提供了比C結構體更多的功能,如預設建構函式,複製建構函式,運算子過載,這些功能使得結構體物件能夠方便的傳值。 比如,我定義一個簡單的結構體,然後將其作為vector元素型別,要使用的話,就需要實現上述三個函式,否則就只能用指標了。 #include

c++)寫一個判斷素數的函式在主函式輸入一個整數輸出是否是素數的訊息。

被1.2是不是素數搞得頭昏腦漲的我...... #include<iostream> using namespace std; void prime(int a) { if(a==1)

c++實現String類(建構函式解構函式複製建構函式各類運算子過載函式編寫

編寫類 String 的建構函式,解構函式,複製建構函式  需要過載下面的運算子: 1、<、>、==和!=比較運算子 2、+=連線運算子和賦值運算子 3、<<輸出運算子和>>輸入運算子 String.h #ifndef _STRING

C/C++---static函式static成員函式static變數static成員變數 再來理一理

首先說一下記憶體的五個區: 棧(stack):由編譯器自動分配釋放,存放函式的引數值,區域性變數的值(除static),其操作方式類似於資料結構中的棧。 堆(heap):一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由OS回收。注意它與資料結

C++中建構函式拷貝建構函式解構函式

C++中預設建構函式就是沒有形參的建構函式。準確的說法,按照《C++ Primer》中定義:只要定義一個物件時沒有提供初始化式,就是用預設建構函式。為所有 的形參提供預設實參的建構函式也定義了預設建構函式。 合成的預設建構函式,即編譯器自動生成的預設建構函式。《C++ Pr

c++建構函式拷貝建構函式解構函式賦值運算子過載

建構函式:        是一個特殊的成員函式,名字與類名相同,建立類型別物件時,由編譯器自動呼叫,在物件的生命週期內只且只調用一次,以保證每個資料成員都有一個合適的初始值。 <strong&g

廣義表的C++實現(包含建構函式拷貝建構函式解構函式獲取表頭表尾獲取直接後繼等操作)

資料結構是資料在系統中的物理儲存結構,自己編寫資料結構可以對某種資料結構的物理和邏輯結構有更深的瞭解。 一、廣義表作為一種資料結構有以下的特點: 1. 廣義表是遞迴的; 2. 廣義表的元素可以使廣義表,也可以是值; 3. 廣義表是有序的; 4. 廣義表是有長度有深度的。 二

c++類詳解:訪問許可權建構函式拷貝建構函式解構函式

類的定義 類可以看做是一種資料型別,類這種資料型別是一個包含成員變數和成員函式的集合。類的成員變數和普通變數一樣,也有資料型別和名稱,佔用固定長度的記憶體。但是,在定義類的時候不能對成員變數賦值,因為類只是一種資料型別或者說是一種模板,本身不佔用記憶體空間,而變數的值則需要

C# 去除字串前0保留有效數字的解決方案

在做專案的時候為了讓編號看起來更霸氣,都加上了00,例如 10加了00 ,程式設計了0010,1加上了就程式設計0001了。 但新增的時候需要生成新的編號,要獲取最大的值,然後分離,再加1,再填充00,開始採用replace("0",""),將0全部替換為空,但這樣對於

C#有關字串的分割替換擷取

一、 1、取字串的前i個字元 (1)string str1=str.Substring(0,i); (2)string str1=str.Remove(i,str.Length-i); 2、去掉字串的前i個字元 string str1=str.Remove(0,

使用C++檔案流fstream讀寫操作十六進位制文字檔案

最近為智慧移動小車編寫上位機軟體的過程中,遇到了檔案讀寫處理的任務,檔案是一般的文字檔案.txt格式的,其內容由十六進位制資料組成。檔案內資料的格式如下: FF FD 03 FD 77 FE 77 1C 27 FF FD 01 FE 00 FE 00 1E 28 FF FE

C++之建構函式解構函式拷貝建構函式

一、定義    建構函式:是在一個定義在類裡面的函式,它的作用是在你建立這個類的物件時被自動呼叫。                    如果你自己定義了則呼叫自己定義的,否則呼叫預設的。    解構函式:是一個在類裡面定義的函式,它的作用是在你的類物件死亡時被呼叫刪除這個類

C語言不定引數個數可變引數函式使用學習

stdarg.h提供了三個巨集,書寫可變引數函式可以用到 void va_start(va_list ap, last); type va_arg(va_list ap, type); void va_end(va_list ap); 上面巨集的字首va表示variab

Linux-C基礎知識學習:C語言作業-將5個學生成績儲存在一個數組中單獨實現一個計算平均成績的average函式 在main函式中獲取該函式返回的平均值並列印。

Linux基礎知識學習 C語言作業:將5個學生成績儲存在一個數組中,單獨實現一個計算平均成績的average函式, 在main函式中獲取該函式返回的平均值,並列印。 #include <s

優秀的C/C++框架和整理值得收藏

(1)ACE龐大、複雜,適合大型專案。開源、免費,不依賴第三方庫,支援跨平臺。(2)AsioAsio基於Boost開發的非同步IO庫,封裝了Socket,簡化基於socket程式的開發。開源、免費,支援跨平臺。(3)POCOPOCO C++ Libraries 提供一套 C+

C++繼承、多型虛成員函式(包括虛解構函式、虛複製建構函式)學習筆記

通過哺乳類派生貓、狗等學習繼承、多型中的知識點 先貼上類的程式碼 #include<iostream> enum BREED { YORKIE, CAIRN, DANDIE, SHETLAND, DOBERAMN, LAB };//犬種 class Mam

C++中的建構函式拷貝建構函式和賦值函式

一.建構函式 1.首先說明一下空類: 對於空類,編譯器會自動加入: 預設建構函式,拷貝建構函式,賦值建構函式,解構函式和取值函式 擴充:空類的大小為1.(因為每個例項在記憶體中都有獨一無二的地址,為了達到這個目的,編譯器往往會給空類增加一個位元組) 2