2014-11-25 2 views
1

저는 C 언어에 익숙하지 않아 지난 2 개월 동안 Kernighan과 Ritchie를 여가 시간에 읽고 있었고 Linux VM에서도 연습하려고했습니다. 나는 포인터에 관한 장에 있으며 설명이 필요하다. 이 장에서는 포인터를 사용하여 한 배열의 내용을 다른 배열로 복사하는 함수가 제공됩니다. 나는 그것이에 '\ 0'을 가리 킵니다 않습니다 결국 다음, 포인터의에서이 작업을 실행할 때포인터가 가리키는 포인터는 무엇입니까?

void strcpy(char *s, char *t) { 

while ((*s++=*t++)!='\0') ; 


} 

내 의심

1

를)입니까?

2) 배열의 두 번째 마지막 요소를 참조하려면 * (s-2)를 사용합니까?

3) 포인터를 사용하여 배열에 저장된 모든 문자를 어떻게 인쇄합니까?

답변

3

포인터를 s에서 실행하면 결국 '\0'을 가리 킵니까?

아니요. 사후 증분이 인 이므로 루프 s의 끝에는 을지나 '\0'이됩니다.

배열의 두 번째 마지막 요소를 참조하려면 *(s-2)을 사용합니까?

당신의 C 문자열이

가 어떻게 포인터를 사용하여 배열에 저장된 모든 문자를 인쇄하는 비어 있지 않은 가정, 문자열의 마지막 문자 것

?

루프에 들어가기 전에 포인터의 초기 값을 저장하거나 복사 된 문자의 수를 계산하지 않는 한 수행 할 수 없습니다. 거기에 적절한 마커가 없으므로 C 문자열을 뒤로 가져 가서 시작 부분을 찾을 수 없습니다.

+0

답장을 보내 주셔서 감사합니다. – user3288054

0
1) when I execute this on the pointer s, then in the end does it point to '\0'? 
as mentioned elsewhere, s will point to one past the '\0' at the end of s string 

2) if I want to refer to the second last element of the array do I use *(s-2) ? 
no, rather use s[strlen(s)=2] 

3) how do I print out all the characters stored in the array using the pointer? 
save the s pointer to a local variable before entering the loop 
char *pSavedS = s; 
then append, after the end of the loop, the line: 
printf("%s", pSavedS); 
+0

답장을 보내 주셔서 감사합니다. – user3288054

관련 문제