나는 다음과 같은 코드를 밖으로 시도하고있다 :strcpy를 통과 초기화 널 포인터 C
int main()
{
char *yo = "yo";
char *whaddup = NULL;
strcpy(whaddup,yo);
}
을 나는 세그먼트 폴트를 얻을. 완전한 C 멍청한 놈 - 다른 곳에서는 whaddup
을 배열로 초기화해야한다고. null에 대한 포인터를 전달할 수없는 이유는 무엇입니까?
나는 다음과 같은 코드를 밖으로 시도하고있다 :strcpy를 통과 초기화 널 포인터 C
int main()
{
char *yo = "yo";
char *whaddup = NULL;
strcpy(whaddup,yo);
}
을 나는 세그먼트 폴트를 얻을. 완전한 C 멍청한 놈 - 다른 곳에서는 whaddup
을 배열로 초기화해야한다고. null에 대한 포인터를 전달할 수없는 이유는 무엇입니까?
strcpy
설명서에는 대상 문자열이 char
배열로 끝나야하며 문자열과 NUL
종결자를 포함 할 수있을만큼 커야 함을 알리는 메시지가 표시됩니다.
은 그래서 당신이 필요로하는 것은
char* yo = "yo";
char* whaddup = malloc(strlen(yo)+1);
strcpy(whaddup, yo);
같은 것입니다 또는 대안 당신은 당신을 위해이 작업을 수행 strdup
기능을 사용할 수 있지만 그것은 POSIX 만의로 표준이 아니다.
I in = 4; 개념적 메모리 할당을 설명하기 위해 sizeof (char) 만 포함되었지만 예 @ user2635088 문자는 1 바이트이므로 필요하지 않습니다. int, double 등의 할당을 시작할 때이 습관을 사용하는 것이 안전합니다. –
whaddup
을 문자 배열로 선언하거나 malloc
으로 공간을 할당해야합니다. 당신이 세그먼트 오류가 발생합니다에 너무도 하나 개의 문자를 복사, 그것을 메모리에있는 공간을 제공하지 않는 whaddup
NULL
에 초기화하여
int main()
{
char *yo = "yo";
char *whaddup = malloc(sizeof(char) * 8); // buffer for 8 characters
strcpy(whaddup,yo);
}
.
null에 대한 포인터를 전달할 수 있지만 포인터를 null로 복사 할 수는 없습니다.
기능 char* strcpy(char* dest, const char* src)
은 dest
는 null
입니다 dest
를 해결하기 위해 주소 src
에서 복사 문자열입니다.
같은 이유로'char * whaddup = NULL; * whaddup = 'a'; 예를 들면. 'int * whaddup = NULL;을 할 수없는 것과 같은 이유이기도합니다. * whaddup = 4;' – immibis
@immibis 이유는 무엇입니까? – user2635088
NULL 포인터는 아무 것도 가리 키지 않습니다 – immibis