2013-05-21 76 views
0

我試圖自己製作strcpy。它應該工作,我甚至複製並粘貼了某人在這裏發佈的關於strcpy的(幾乎精確的代碼)。兩者都給我一個「分割錯誤」。我的strcpy有什麼問題?

char* strcpy(char * destination, const char * source) 
{ 
    while((*destination++ = *source++) != '\0') 
     ; 
    return destination; 
} 

這段代碼有什麼問題?

char* a = "hello"; 
cout << strcpy(a, "Haha") << endl; 
+5

顯示您調用此函數的代碼。 –

+16

我的賭注是,這被稱爲w /字符串文字作爲目的地 –

+0

爲什麼不能C++ 03使'char *'字符串文字被禁止:( – chris

回答

4

由於"hello"存儲在那裏,因此您正在嘗試寫入數據段。

因此,當您撥打strcpy時,您會收到分段錯誤。

嘗試:

char a[] = "hello"; 
cout << strcpy(a, "Haha") << endl; 

代替。

編輯:在你的strcpy函數裏面,拷貝後,destination將指向字符串的結尾,你需要返回字符串的開頭。

3

a是一個指向字符串文字:

char* a = "hello"; 

試圖修改字符串文字是未定義的行爲。正如卡爾建議,如果你用字符串文字初始化數組,它會起作用:

char a[] = "hello" ; 
+0

@dmckee是,正在這樣做:-) –

6

你試圖覆蓋字符串文字。這會導致未定義的行爲。聲明a作爲數組來代替:

char a[] = "hello"; 

strcpy實施有一個bug,太(假設正常的語義)。它應該返回一個指向開始目標緩衝區的指針,而不是結尾。

3

除了上面和下面提到的關於字符串文字的所有內容之外,您還返回了一個指向您字符串的END的指針,所以即使您避免了分段錯誤,也會打印「」。