2015-02-03 5 views
1

두 개의 char 포인터를 받고 다른 포인터의 내용을 다른 포인터로 복사 한 다음 포인터의 시작 부분을 반환하는 함수를 만들어야합니다. 나는 지금까지 2 시간 동안 이것을 어지럽 혀 왔고 모두 다른 100 가지 예를 읽었습니다. 여기에 내가 지금 가지고있는 것입니다 :포인터가 작동하지 않는 strcopy 함수

+1

포인터를 가리키는 포인터 대신 문자를 증가시키고 대상 문자열의 시작을 추적하지 못합니다. ** 먼저 간단한 연습을 해보십시오. ** – Beta

+0

http://stackoverflow.com/questions/13460934/strcpy-using-pointers/26317153#26317153 –

답변

2
dest++; 

dest 포인터이며 이미 가리키는 dest을 반환 할 때 그래서 src 에서 값을 복사하기 위해 그것을 이동 문자열의 끝으로.

이 포인터를 이동하지 마십시오. 색인을 사용하여 값을 복사하기 만하면됩니다. 당신이 *dest++ 당신이 원하는 결과를 제공하지 않습니다 반환 무엇 dest++에 고정 그래서 경우에도

int i=0; 
while(*src) 
{ 
    dest[i] = *src; 
    i++; 
    src++; 
} 

dest[i] = '\0'; 

return dest; 

.

+0

이 반환됩니다. 훨씬 의미가 있습니다. 엄청 고마워! – Cory

+0

@ 코리는 probs .. – Gopi

4

원하는 것은 실제로 가리키는 문자를 증가시키는 동안 포인터를 증가시키는 것입니다.

변경

*src++; 
*dest++; 

에 :

src++; 
dest++; 
+0

그런 후, 내가 무엇을 돌려 주느냐가 나에게 올바른 결과를주지 못한다. 예를 들어, src에 "Hello world"를 반환하면 ""이 반환됩니다. – Cory

+1

@Cory 잘못된 값의 포인터를 이동하면 값 – Gopi

0

이 두 라인 :

*src++; 
    *dest++; 

가 있어야한다 :

src++; 
    dest++; 

주의 코드는 포인터가 가리키는 것은 아닙니다 무엇 포인터를 증가 필요로 포인터없이 드 참조.

dest의 초기 값을 저장하면 반환 될 수 있으므로 좋은 생각입니다. 그리고 이미 dest 버퍼에있는 문자열 손실을 피하기 위해 dest의 값 (저장 후)이 dest + = strlen (dest)에 의해 증가되어야한다고 생각합니다.

그래서 dest에 초기 문자열을 오버레이하지 않고 두 문자열의 집중이 발생합니다.

이 함수가 호출되기 전에 dest 버퍼가 두 문자열 +1의 strlen()을 보유 할만큼 충분히 길다는 검사가 있어야합니다.

+1은 종료 바이트를 허용합니다.