본문 바로가기
프로그래밍 언어/C(C++, C#)

[Error/C] 서식 문자열 '%d'에 'int' 형식의 인수가 필요하지만 variadic 인수의 1의 형식이 'size_t'입니다.

by upself 2022. 10. 28.
728x90

 

안녕하세요~

시험공부 하다가 책에서 이런 오류를 설명해 주길래

신기해서 작성합니다.

 

포인터의 크기는 플랫폼이 결정합니다.

즉, 32비트의 플랫폼이면 4바이트

64비트의 플랫폼이면 8바이트입니다.

 

 

 

포인터는 주소를 저장하는 변수입니다.

즉, 포인터는 다른 변수를 가리키는 변수라고 할 수 있죠.

 

 

 

포인터를 선언할 때 지정하는 데이터형은

포인터가 가리키는 변수의 데이터형입니다.

 

 

책에서 발생하는 에러는

Visual Studio를 사용하였기 때문에 발생하는 것으로 보입니다.

 

 

 

Visual Studio에서 프로젝트를 생성할 때 디폴트로 솔루션 플롯폼을

'x86'로 지정해 두기 때문에 값을 제대로 출력하지 못할 수도 있다는 에러문구 입니다.

[Error] 서식 문자열 '%d'에 'int' 형식의 인수가 필요하지만 variadic 인수의 1의 형식이 'size_t'입니다.

 

 

 

에러를 해결하는 방법은 2가지 있습니다.

 

1. 'x84'를  'x64'로 변경하기

빌드 => 구성 관리자(O)...
활성 솔루션 플랫폼(P) => x64 => 닫기

 

2. 연산자를 %d가 아닌 %zd로 작성하기

#include <stdio.h>

int main(void){
	int *a;
	double *b;
	char *c;
	
	printf("sizeof(a) = %zd\n", sizeof(a));
	printf("sizeof(b) = %zd\n", sizeof(b)); 
	printf("sizeof(c) = %zd\n", sizeof(c)); 
	
	printf("sizeof(int*) = %zd\n", sizeof(int*));
	printf("sizeof(double*) = %zd\n", sizeof(double*));
	printf("sizeof(char*) = %zd\n", sizeof(char*));
	
	return 0;	
}

 

 

제가 사용하는 플랫폼은 64비트이기 때문에 

8비트가 찍히는 것입니다.(Dve C++사용)

 

 

 

 

산다는것 그것은 치열한 전투이다.  

-로망로랑

 

반응형