2011-05-11 119 views
1

我不能使用xstrcpy複製和打印,並打印一個空行,當我嘗試雖然打印整個字符串主while循環打印每個字符...但不是字符串立即while循環之下.. .Don't知道爲什麼會這樣:(面臨的一些問題,下面的一段代碼...有什麼不對嗎?

代碼:

#include<stdio.h> 
#include<stdlib.h> 
int xstrlen(char *); 
char * xstrcpy(char *,char *); 
main() 
{ 
    char *expptr1="Hello World"; 
    char *expptr2 = "Hello Again"; 
    char *expptr3; 
    printf("%d\n",xstrlen(expptr1)); 
    expptr3 = xstrcpy(expptr1,expptr2); 
    printf("%s\n",expptr3); 
} 

int xstrlen(char *ptr) 
{ 
    //printf("I am here\n"); 
    int count = 0; 
    while(*ptr++!='\0') 
     count++; 
    return count; 
} 

char * xstrcpy(char *ptr1,char *ptr2) 
{ 
    int i=xstrlen(ptr2); 
    printf("%s\n",ptr1); 
    printf("%s\n",ptr2); 
    ptr1 =(char *)malloc(i); 
    //printf("i am here\n"); 
    while(*ptr2 != '\0') 
    { 
     *ptr1 = *ptr2; 
     printf("%c\n",*ptr1); 
     ptr1++; 
     ptr2++; 
    } 
    printf("%s",ptr1); 
    return ptr1; 
} 

輸出:

11 
Hello World 
Hello Again 
H 
e 
l 
l 
o 

A 
g 
a 
i 
n 
ׁׁ 

Exited: ExitFailure 4 
+0

請發表您的問題,下一次的代碼。 – 2011-05-11 18:15:57

回答

4

你已經被你複製的字符串改變PTR1的指針地址左右。當你打印出ptr1的時候,它實際上是點球這是一些垃圾值的字符串的結尾。

所以,你需要做的是保持在xstrcpy開始的PTR1和返回起始地址,並且將正確打印出PTR1,我想。

+0

現在明白了......感謝噸.. !!! – phoenix 2011-05-11 18:18:48

+1

還有的將是一個「\ 0」從最終丟失了。 – James 2011-05-11 18:19:12

+0

這樣做會宣佈另一個指針PTR3在那裏我可以開始存儲PTR1的地址,然後返回PTR3理想的方式......有什麼說什麼的傢伙??? – phoenix 2011-05-11 18:28:59