2013-01-07 43 views
-2
#include <stdio.h> 
char *strcpy_(char *dst, char *src) 
{ 
    while((*src++ = *dst++)!= '\0') 
    return src; 
} 
main() 
{ 
    char src_str[] = "C programming language"; 
    char dst_str[100]; 
    printf("dst_str:%s\n", strcpy_(dst_str, src_str)); 
} 

當我運行這個函數時,這個輸出是「編程語言」C不見了,這裏發生了什麼,而且我還有一個問題,我不想使用數組來傳遞該函數的參數意味着我不想使用char src_str[] = "C programming language"char dst_str[100]取而代之,我想使用像char *src_str = "C programming language"char *dst_str這樣的指針,如果我使用的話,我會得到一個分割錯誤。strcpy函數的執行

+1

你似乎被複制到DEST SRC! –

+2

你也忘了在這段時間後放一個分號或大括號。目前,回報在這段時間內正在被ru。 – hugomg

+1

你不需要'!='\ 0''部分。當這個條件滿足時,while循環將會保留。 – squiguy

回答

0

要分配DSTSRC,而不是周圍的其他方法。

1

您用目標字符串覆蓋源字符串。你可能希望它倒過來:

(*dst++ = *src++) 
0

你似乎在複製destsrc!請注意,如果你用了一個比較合適的函數原型,則編譯器會抓住這個錯誤:

char * strcpy(char *dest, const char *src); // <<< note the `const` !!! 

你還缺少while循環一個;

8

除了複製錯誤的方向,你在while循環的末尾缺少一個分號:

char *strcpy_(char *dest, char *src) { 
    char *orig = dest; 
    while((*dest++ = *src++)!= '\0') 
     ; // <<== Very important!!! 
    return orig; 
} 

沒有分號,它表示一個空語句,你複製後執行return你的第一個人物,當然是不正確的。

最後,你可以在迴路中的頭跳過檢查爲零,這樣的:

while(*dest++ = *src++) 
    ; 
+0

我很確定'* dest ++'和'dest'應該是'* dst ++'和'dst'。 – okeegan