2011-05-11 3 views
1

xstrcpy를 사용하여 복사 및 인쇄 할 수 없으며 while 루프에서 각 문자가 인쇄되지만 주 전체 문자열을 인쇄하려고하면 빈 줄이 인쇄되지만 while 루프 바로 아래에는 문자열이 인쇄되지 않습니다. 이 :(일어나고있는 이유를 알고 진다고다음 코드 조각에 문제가 있습니다 ... 문제가 있습니까?

코드 :

#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; 
} 

출력 : 당신이 문자열을 복사과 같이 PTR1의 포인터 주소를 변경 한

11 
Hello World 
Hello Again 
H 
e 
l 
l 
o 

A 
g 
a 
i 
n 
ׁׁ 

Exited: ExitFailure 4 
+0

다음 번에 질문에 코드를 게시하십시오. –

답변

4

그래서 의해. ptr1을 출력 할 때, 실제로 pointi입니다. 문자열의 끝에는 쓰레기 값이됩니다.

그래서해야 할 일은 xstrcpy의 시작 부분에 ptr1을 유지하고 그 시작 주소를 반환하면 올바르게 ptr1이 인쇄됩니다.

+0

지금은 ... 감사합니다 톤 .. !!! – phoenix

+1

끝에 '\ 0'이 누락됩니다. – James

+0

이상적인 방법은 ptr1의 주소를 처음에 저장 한 다음 ptr3을 반환 할 수있는 다른 포인터 ptr3을 선언하는 것입니다. – phoenix

관련 문제