2016-06-28 2 views
0

나는 다음과 같은 코드를 밖으로 시도하고있다 :strcpy를 통과 초기화 널 포인터 C

int main() 
{ 
    char *yo = "yo"; 
    char *whaddup = NULL; 
    strcpy(whaddup,yo); 
} 

을 나는 세그먼트 폴트를 얻을. 완전한 C 멍청한 놈 - 다른 곳에서는 whaddup을 배열로 초기화해야한다고. null에 대한 포인터를 전달할 수없는 이유는 무엇입니까?

+0

같은 이유로'char * whaddup = NULL; * whaddup = 'a'; 예를 들면. 'int * whaddup = NULL;을 할 수없는 것과 같은 이유이기도합니다. * whaddup = 4;' – immibis

+0

@immibis 이유는 무엇입니까? – user2635088

+0

NULL 포인터는 아무 것도 가리 키지 않습니다 – immibis

답변

2

strcpy 설명서에는 대상 문자열이 char 배열로 끝나야하며 문자열과 NUL 종결자를 포함 할 수있을만큼 커야 함을 알리는 메시지가 표시됩니다.

은 그래서 당신이 필요로하는 것은

char* yo = "yo"; 
char* whaddup = malloc(strlen(yo)+1); 
strcpy(whaddup, yo); 

같은 것입니다 또는 대안 당신은 당신을 위해이 작업을 수행 strdup 기능을 사용할 수 있지만 그것은 POSIX 만의로 표준이 아니다.

+0

I in = 4; 개념적 메모리 할당을 설명하기 위해 sizeof (char) 만 포함되었지만 예 @ user2635088 문자는 1 바이트이므로 필요하지 않습니다. int, double 등의 할당을 시작할 때이 습관을 사용하는 것이 안전합니다. –

1

whaddup을 문자 배열로 선언하거나 malloc으로 공간을 할당해야합니다. 당신이 세그먼트 오류가 발생합니다에 너무도 하나 개의 문자를 복사, 그것을 메모리에있는 공간을 제공하지 않는 whaddupNULL에 초기화하여

int main() 
{ 
    char *yo = "yo"; 
    char *whaddup = malloc(sizeof(char) * 8); // buffer for 8 characters 
    strcpy(whaddup,yo); 
} 

.

0

null에 대한 포인터를 전달할 수 있지만 포인터를 null로 복사 할 수는 없습니다.

기능 char* strcpy(char* dest, const char* src)destnull입니다 dest를 해결하기 위해 주소 src에서 복사 문자열입니다.