2015-02-06 4 views
1

는 :C에서 배열에 0x00을 할당 하시겠습니까? 나는 그들이이 가지고 있던 슬라이드를 통해 읽고 있었다

버퍼가 null의 표현이며 우리가 NULL buffer[current]=NULL로 교체 char buffer[300];

0x00 경우 단지 문자 배열입니다

int current = 0; 
buffer[current]=0x00; 

다음과 같은 오류를 제공합니다 컴파일 할 때 :

assignment makes integer from pointer without a cast 

누군가가 buffer[current]=0x00;의 의미를 설명 할 수 있습니까? 배열 목록의 끝을 확인합니까?

+0

배열의 첫 번째 요소를 "hex"0으로 설정합니까? – Rizier123

+0

그건 내 추측 일텐데. –

+1

'NULL' 포인터와 NUL 바이트를 혼동하지 마십시오. 그들은 비슷하게 들리지만 다르다. – 5gon12eder

답변

3

NULL은 구현 정의 널 포인터 상수로 확장되는 매크로입니다. 이 두 개의 정의

는 NULL 유효 :

#define NULL 0 

또는

#define NULL ((void *) 0)) 

후자는 컴파일러에서 사용하는 경우 :

char buffer[300]; 
buffer[current]=NULL; 

당신은 잘못된 프로그램으로이 정수 객체에 포인터 값을 할당 할 수 없습니다.

((void *) 0)은 포인터 유형의 값입니다. 0 또는 이와 동등한 16 진수 값 0x00을 사용하여 0을 정수 개체에 할당하십시오. 내가 assignment makes integer from pointer without a cast 생각

+0

그래서 '0x00'은 버퍼를 null로 설정합니까? – Mark

+0

'0'으로 설정합니다. '0'은 ASCII Null 문자의 값이기도하며 NUL (Null 또는 NULL이 아님)이라고도합니다. – ouah

+0

그리고 버퍼를 '0'으로 설정하지 않고 하나의 요소 만 설정합니다. 'buffer [current] = 0;''current'의'buffer' 요소를'0'으로 설정합니다. – ouah

1

는 컴파일러 GCC의 경고 및 NULL 거의 IS이 0x0에 대한 정의입니다 :

#define NULL 0 

정도 후자의 경우에 대신 포인터의 정수로 NULL을 할당하는 경우

#define NULL (void *)0 

당신 GCC에서 컴파일러 경고를 얻는다.