2010-01-12 3 views
13

이 작동하지 않습니다unsigned char를 sprintf하는 방법?

unsigned char foo; 
foo = 0x123; 

sprintf("the unsigned value is:%c",foo); 

나는이 오류가 발생합니다 :

cannot convert parameter 2 from 'unsigned char' to 'char'

+0

매개 변수 2를 '부호없는 char'에서 'char *'로 변환 할 수 없습니까? –

+5

sprintf()에 대한 매개 변수가 없습니다. 첫 번째 매개 변수는 출력 버퍼이고 두 번째 매개 변수는 출력 버퍼입니다 문자열이 남아있다. 나머지는 모두 포맷 문자열에 의존한다. 단지 std에 프린트하고 싶다면 printf()를 사용한다. (처음에는 's'를 쓰지 않는다.) –

+0

isalnum (..) '문자 값을 임의로 인쇄하는 대신 실제 16 진 값 대 모든 문자가 0x01과 같은 16 진수 값을 표시하지는 않습니다. –

답변

18

에서 printf ("% U ','C ');

+0

이 작동합니다, 대신 sprintf – Christoferw

+2

대신 printf 사용해야합니다. 나는 "% u"의 예제를 제공하기 위해 sprintf가 아니라 printf를 호출합니다. char. – Ariel

5

편집

snprintf 좀 더 안전합니다. 올바른 버퍼 크기가 사용되는지는 개발자의 몫입니다.

이 시도 :

char p[255]; // example 
unsigned char *foo; 
... 
foo[0] = 0x123; 
... 
snprintf(p, sizeof(p), " 0x%X ", (unsigned char)foo[0]); 
+1

단지 예제 일뿐입니다. 무언가의 부호없는 문자로 sprintf해야합니다 .p는 문자열 버퍼 –

+0

입니다. 이 오류 : 첨자에는 배열 또는 포인터 유형이 필요합니다. – Christoferw

+0

코드가 더 필요합니다. –

3

나는 당신의 방법으로 혼란 스럽다고 생각합니다. sprintf 작품. 첫 번째 매개 변수는 문자열 버퍼이고 두 번째 매개 변수는 서식 지정 문자열이며 출력 할 변수입니다. 문제를 일으키는 서명되지 않은 문자보고 떨어져 가기 전에

34

,이 라인에 대해 자세히 살펴 :

sprintf("the unsigned value is:%c",foo); 

sprintf와의 첫 번째 인수는 항상 값이 인쇄되는 문자열입니다. 그 줄은 다음과 같아야합니다 :

sprintf(str, "the unsigned value is:%c",foo); 

sprintf 대신 printf를 사용하는 경우가 아니면.

고정 된 후 형식 문자열에서 % u를 사용하여 부호없는 유형의 값을 인쇄 할 수 있습니다.

+5

또한 0x123은 너무 커서 부호없는 char에 맞지 않습니다. 당신은 아마도 foo = 123 (아스키 '{')를 원합니다. – Dolphin

+0

@ 돌고래 : 아마도. 그러나 UCHAR_BIT가> 8 인 시스템에 적합합니다. 16 비트 DSP – MSalters

1

sprintf를 사용하면 버퍼 오버플로가 쉽게 발생할 수 있으므로 사용하지 마십시오.

Microsoft 표준 C 라이브러리로 프로그래밍 할 때 snprintf (또는 _snprintf)를 선호해야합니다. 로컬 함수의 스택에 버퍼를 할당 한 경우, 당신은 할 수 있습니다 :

char buffer[SIZE]; 
snprintf(buffer, sizeof(buffer), "...fmt string...", parameters); 

데이터는 잘립니다받을 수 있지만, 버퍼 오버 플로우에 확실히 바람직하다.

관련 문제