2011-08-15 3 views
2

char buf[MAXDATASIZE] = { 0 };{0}은 무엇을 의미합니까?C에서 "{0}"은 무엇입니까?

인쇄를 시도했지만 아무 것도 인쇄하지 않았습니다.

#include <stdio.h> 

int main(void) 
{ 
     char buf[100] = { 0 }; 
     printf("%s",buf); 
     return 0; 
} 
+4

** 보편적 인 zero-initializer ** :) 그것은 0 (올바른 종류의 0으로 설정)을 위해 작동합니다. * (초기화를 위해) * :'int k = {0}; char * data = {0}; _Complex double x = {0}; 어떤 배열이라도 구조체 [42] = {0};/* ... * /' – pmg

답변

12

이것은 배열의 초기화 목록입니다. 그래서 그것은 매우 정상적인 구문처럼 : 당신이 당신의 초기화 목록에 충분한 요소를 제공하지 않는 경우

char buf[5] = { 1, 2, 3, 4, 5 }; 

그러나, C 표준 상태, 그것은 그들의 나머지를 기본값으로 초기화됩니다. 따라서 코드에서 buf의 모든 요소는 0으로 초기화됩니다.

printfbuf이 사실상 길이가 0 인 문자열이기 때문에 아무 것도 표시하지 않습니다.

+0

그래서 ... * 첫 번째 문자는 '0'이고 다른 문자는 * default *가 '0'일 것이라고 명시 적으로 * 명시되어 있습니까? 'char buf [100] = {65, 66, 67};''A '''B'''C ''를 처음 세 원소로 사용하고 나머지는 모두 default *에서 '0'으로? 'char buf [100];이 초기화되지 않았습니까? 예기치 않은 값 (예약하기 전에 메모리에 기록 된 값)을 포함합니까? – binaryLV

+1

@binaryLV : 예, 당신이 말하는 모든 것이 정확합니다. 유일한 예외는'char buf [100];을 전역 변수 또는 정적 변수로 쓰면 0으로 초기화됩니다 (다른 모든 컨텍스트에서는 초기화되지 않습니다). –

2

버퍼에 배열을 지정하고 있습니다.

일반적으로 문자열의 경우 ASCII 값이 0 인 문자가 문자열을 종료합니다. 당신은 당신이

char buf[100] = {'H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', 0}; 

또는 어쨌든

char buf[100] = "Hello world"; 

을 할 수 있었던 캐릭터 라인 내에서 '안녕하세요 세계'를 읽고 문자열을 넣어 원하는 경우 예를 들어

, 당신 때문에 코드를 인쇄 아무것도 길이가 0 인 문자열, 즉 빈 문자열을 인쇄하려고합니다.

+1

'0'과''\ 0 "'은 거의 똑같습니다. 첫번째는'int'에서'char'으로 변환됩니다; 두 번째는 두 개의 문자로 이루어진 배열이며 둘 다 동일한 0 값을가집니다. 여기에는 이식성 문제가 없습니다. – pmg

+0

@pmg, 감사합니다. –

관련 문제