2014-07-22 3 views
0

strncat의 내 버전이 너무 많은 문자를 대상에 복사하고 있는데 그 이유를 알 수 없습니다. 'N'이 너무 많은 문자이다하나의 오류로 인해 strncat이 해제되었습니다. - K & R C 연습 5-5

stringy 

를 출력으로 사용 3

#include <stdio.h> 
#define MAX_CHARS 20 

void nconcatenate(char *start, char *end, int n) 
{ 
    if(sizeof start + n > MAX_CHARS) 
    return; 

    while(*start++); 
    start--; /* now points to the final char of start, the \0 */ 
    int i; 
    for(i = 0; (*start++ = *end++) && i < n; i++); 
    *start = '\0'; 
} 

int main() 
{ 
    char start[MAX_CHARS] = "str"; 
    char *end = "ingy!"; 
    nconcatenate(start, end, 3); 
    printf("start = %s\n", start); 
    return 0; 
} 

.

+1

디버거에서 코드를 밟아 보셨습니까? – OldProgrammer

+3

'sizeof start'는 항상'sizeof (char *)'btw를 반환합니다. –

+0

@OldProgrammer 나는 아직 많이 사용하는 초보자이지만 gdb로 시도했다. –

답변

4

어쩌면 상태

(*start++ = *end++) && i < n 

먼저는 (* = * ++ ++ 시작 단부) 않고, 그 후, 나에게 < 없음을 확인하기 때문이다.

테스트하지는 않았지만 확인하십시오.

+0

환상적으로, 그걸 고쳤습니다. 나는 그 사실을 발견하지 못했을 것입니다. 고맙습니다 –