2014-06-10 3 views
1

stdin에서 문자를 복사하는 기능을 이해하려고하지만 while 루프와 코드를 정확히 이해할 수는 없습니다 .....
while 루프는 어떻게합니까? 작업?? 내가 이해하는 바로는 ith 문자까지 to[]ith 문자와 같지 않습니다. from[] 문자를 계속 추가 하시겠습니까? i 맞습니까?
예인 경우 두 변수에서 i 번째 문자가 어떻게 같습니까?간단한 C 복사 기능을 이해하려고 시도합니다

void copy(char to[] , char from[]) 
{ 
    int i; 
    i = 0 ; 
    while ((to[i] = from[i]) != '\0') 
     ++i; 
} 
+0

문자열 복사본입니다. from의 i 번째 값을 from에 할당하고 있습니다. 그런 다음이 값이 "NUL"인지 아닌지 (즉, 문자열의 끝이 아님) 확인한 다음 i를 증가시키고 복사를 계속합니다. – Joe

+0

"에서부터 [] **까지의 i 번째 문자가 **와 같지 않을 때까지를 의미합니다."-'='는'=='과 매우 다릅니다! –

+0

nit-pick : 아마도이 함수를'void copy (char * to, const char * from)'로 바꾸는 것이 좋겠지 만 기존의 코드를 리팩터링해야 할 필요가 있지만 - int copy (char * to, const char * from, size_t max)'. 후자 함수는 오버플로를 피하고 복사 된 문자의 수를 반환합니다. –

답변

3

가 도움이 될 수 있습니다 다시 쓰기 :

do{ 
    to[i] = from[i]; 
    ++i; 
}while (from[i-1] != '\0') // -1 here because we incremented i in the line before and need to check the copied position 

당신이 지금 이해합니까?

+0

그래서 []에서 []까지 문자를 복사하고 있습니다. – ArchKudo

+1

오른쪽에서 왼쪽으로 배정을 읽습니다.따라서 이름에서 알 수 있듯이 'from'에서 'to'로 복사됩니다. – RedX

1

while 루프 조건 C에 할당 식 할당에 할당되는 값의 값을 갖는다는 사실을 사용
여기 쇼트 코드이다. 즉, while 루프의 조건을 구현하여 부작용, 즉 대상에 대한 소스의 요소 별 할당을 구현할 수 있습니다. 전체적으로 루프의 실제 작업은 해당 조건에서 수행되지만 루프의 몸체는 인덱스 i 만 증가시킵니다.

1

할당이 작동하는 방식입니다. 할당 (a = b)은 값 (b)를 반환합니다. 여기서 뭘하는지, [i]에서 [i]로 이동하고, 반환 값 (이 경우, [i])과 '\ 0'문자를 비교합니다.

null 문자 (0x00)는 임의의 문자열을 종료하므로 복사중인 문자열의 종료 문자입니다.

그러나이 코드는주의해야합니다. 배열의 경계를 확인하지 않고 올바르게 종료되지 않은 문자열이있을 경우 세그먼트 화 오류가 발생하게되므로, to [] 문자열이 너무 짧은 위치.

0

우선 fromith 문자를 toith으로 복사하고 해당 문자열의 끝 부분을 확인하십시오. 그렇지 않으면 i를 증가시켜 (다음 문자를 가리키는 위치 또는 색인) 문자열의 끝과 일치 할 때까지이 작업을 수행합니다. 즉 '\0'입니다.

0

코드는 그것의 끝이 아니다 동안 그래서, 그것은에에에서 복사를 계속

void copy(char to[] , char from[]) 
{ 
    int i; 
    i = 0 ; 
    while (from[i] != '\0') 
     { 
     to[i] = from[i]; 
     ++i; 
     } 
    to[i] = '\0'; 
} 

과 동일합니다.

+1

'\ 0'이'from '의 첫 문자이고'to '에 복사하지 않으면 중단됩니다. – RedX

관련 문제