2013-03-08 100 views
0
#include<stdio.h> 
#include<malloc.h> 
void my_strcpy(char *sour,char *dest){ 
if(sour == NULL || dest == NULL){ 
    return; 
} 
dest = sour; 
} 
int main(){ 
char *d = NULL; 
char *s = "Angus Declan R"; 
//d = malloc(sizeof(strlen(s)+1)); 
//my_strcpy(s,d); 
d = s; 
printf("\n %s \n",d); 
return 0; 
} 

在此我試圖讓指針「d」指向「s」指向的位置。爲什麼它沒有指向位置。將指針的內容複製到另一個

+0

這個問題是一個重複數百倍,但有點困惑其中的其他錯誤... – 2013-03-08 04:20:24

+0

你在尋找memcpy()? – 2013-03-08 04:21:36

回答

3

C是一種傳值語言。 C FAQ的This question可以回答你的問題。請注意,即使你修復了你的函數原型,你的算法根本不會複製一個字符串 - 只是一個指針。你可以只是更換電話:

d = s; 

在你main功能。 malloc也是不必要的 - 你只是在泄漏它。

2

這是因爲c語言是通過價值。而是傳遞指針的地址。

void my_strcpy(char *sour,char **dest) 
// Condition checking and then do - 
    *dest = sour ; 
+0

謝謝現在我明白了基礎知識 – Angus 2013-03-08 04:57:03

+0

@Angus很高興我很有幫助:) – Mahesh 2013-03-08 05:06:55

1

這裏* d和* s是兩個指針,你只是複製存儲在s指針存儲的指針,它指向的數組和數組包含「Angus Declan R」,d不能指向地址

當u正在聲明/定義像

INT * S = 「安格斯迪克蘭R」; --->最初在代碼段(這是隻讀區域)中創建了一個數組,並且s現在指向該數組的基地址。即使您不能直接使用* su訪問字符串,只能選擇打印/訪問使用地址。

唯一的原因是在內存的代碼段區域中創建的數組。

這裏%s使用基地址輸出值/字符串/字符,直到遇到空值。 malloc是不必要的, 在void my_strcpy()dest = sour;也是不必要的。它就像d = s; 。

如果解釋不好,請諒解。

+0

我真的會建議在網站中使用代碼突出顯示和塊引用來幫助提高您的帖子的可讀性。你會對你的問題引發更多的迴應,對於有同樣問題的其他人更有幫助。 – 2013-03-08 06:26:17

相關問題