2010-05-29 4 views
2

C에서 문자열을 처음 8 자로 제한하고 싶습니다. 예를 들면 다음과 같습니다.C에서 제한 출력

char out = printf("%c", str);

어떻게하면 처음 8 자만 반환합니까?

+0

%의 C 것이다 한 문자 만 인쇄하십시오. 이미 출력을 제한했다고 말하고 싶습니다. – abelenky

답변

9

당신은 형식 지정자의 정밀도를 설정하여 길이를 제한 할 수 있습니다

printf("%.8s", str); 

이 널 종료 문자열에서 에 최대 8 개 문자를 인쇄 할 것이다는 지적-에 str에 의해. str 길이가 8 자 미만이면 전체 문자열을 인쇄합니다. null로 끝나는 문자열에 대한 형식 지정자는 %s하지 %c ( %c은 하나의 char을 인쇄하는 것입니다), 그 printfint (인쇄 된 문자의 총 수를) 반환이 아닌 char입니다

하는 것으로.

+0

고마워. 모든 공간을 제거 할 수있는 방법이 있습니까? – Tech163

+0

Nvm. printf ("% .s", hexencode (c))로 변경했습니다. 당신의 도움을 주셔서 감사합니다. – Tech163

+0

* 지정자로 런타임시 최대 길이를 지정할 수도 있습니다 :'printf ("%. * s", max_len, str); ' –

0

아니요

올바르지 않습니다. 표본 인쇄 "% 8s"는 주어진 예와 같이 최대 8 칸을 인쇄합니다. 잘라 내지 않습니다. ISOC99. 이것이 창문 일 뿐이라면, MS는 많은 것을 무시하고 세상을 무시합니다. 문자열의 길이가 표보다 길면 전체 문자열이 인쇄됩니다. 참조 : GCC 3.4.2에서

int main() 
{ 
    char tmp[]="123456789"; 
    printf("1 %1s\n", tmp); 
    printf("2 %2s\n", tmp); 
    printf("4 %4s\n", tmp); 
    printf("8 %8s\n", tmp); 
    printf("16 %16s\n", tmp); 
    printf("32 %32s\n", tmp); 
    return 0; 
} 

출력을 솔라리스 5.9에 : 복제 및이의 printf로 보낼 수 있습니다 다음 문자열을 자릅니다

> ./a.out     
1 123456789      
2 123456789      
4 123456789      
8 123456789      
16  123456789     
32      123456789 

의 sprintf()를. 아니면 소스 문자열을 걱정하지 않는 경우 :

char * trunc(char *src, int len) 
{ 
    src[len]=0x0; 
    return src; 
} 

참조 : 국제 표준 © ISO/IEC ISO/IEC 9899 : TC2, WG14/N1124위원회 초안 - 2005년 5월 6일

+0

내 대답에 대한 응답으로 이것을 의미한다고 가정 할 때, 나는'. '형식 지정자에서 :'% 8s'은 * 최소 * 너비를 8 자로 설정합니다; '% .8s'는 * 최대 * 너비를 8 자로 설정합니다 (형식 지정자의 _width_ 및 _precision_ 한정자입니다). 이 동작에 특정한 플랫폼은 없습니다. C 언어 (C 표준 라이브러리가 포함되어 있으므로 C++의 사양)의 일부입니다. –

+0

당신은 정확합니다 - 나는 그리워했다. –