2013-08-03 2 views
1

이 코드는 printf가 단지 하나의 param을 가지고 있음을 발견했습니다. 그리고 작동합니다! printf에 관한 모든 것은 printf ("format", ...)입니다. 하지만 왜이 코드가 작동합니까? 어떤 대답이 도움이 될 것입니다. 감사.Printf의 Param

1 #include <stdio.h> 
    2 
    3 int main() 
    4 { 
    5   char a[]= "hello world"; 
    6   printf(a); 
    7   return 0; 
    8 } 
~   

답변

2

a는 형식입니다. 그러나 많은 사람들이 a이 형식이고 대신 리터럴 문자열이라고 생각하기 때문에 이러한 종류의 사용법은 매우 위험합니다. 차이점은 a%이 포함 된 경우 형식 지정자로 해석되지만 지정자에 대한 인수가없는 것입니다.

printf("%s", a); 

또는 필요한 경우 단지 puts를 사용

printf에 하나의 메시지 문자열을 인쇄 할 때, 당신은 항상 대신해야한다.

+0

+1 'printf ("% s", a);에 대한 +1. – jxh

+0

@R .. 나는 printf ("% s", a)를 안다. 나는 printf (a)에 대해 혼란 스럽다. 나는 결코 컴파일되지 않을 것이라고 생각한다. 고마워. –

0

a은 형식 지정자가없는 형식 문자열로 처리됩니다.

일반적으로 printf()은 형식 문자열을 스캔하여 형식 지정자가 아닌 모든 것을 인쇄합니다. 지정자를 만나면 디코드 한 다음 가변 인수 목록에서 인수를 가져 와서 지정자에 따라 형식을 지정하고 출력 한 다음 문자열 끝에 도달 할 때까지 반복합니다.

a에는 형식 지정자가 없으므로 printf()은 변수 인수 목록에서 인수를 취하지 않습니다.

일반적으로 printf()은 이러한 방식으로 임의의 문자열을 인쇄하는 데 사용해서는 안됩니다. 프로그램은 문자열을 인쇄하는 경우, 대신 fputs()를 사용할 수 있습니다

fputs(a, stdout); 
0

printf은 변수 목록이있는 함수입니다. 첫 번째 매개 변수는 서식 세부 정보를 찾기 위해 구문 분석되는 문자열입니다. 예를 들어, 서식 지정 세부 사항 (필드는 %으로 시작)이 없습니다. 따라서 더 이상 인쇄 할 매개 변수가없고 코드가 작동합니다.

0

int printf (const char * format, ...);

필수 인자 format...로 표시 목록 또는 0 개 이상의 요소가 될 수있는리스트 인수 함수이다.

따라서 printf(a);은 필요한 인수 만 가진 printf()의 호출 일뿐입니다.