IT이야기

"%"가 뭐죠?*s"는 printf의 의미입니까?

cyworld 2022. 6. 20. 21:36
반응형

"%"가 뭐죠?*s"는 printf의 의미입니까?

코드 스니펫을 받았는데

printf("%.*s\n")

의 기능%.*s심술궂은가요?

아스타리스크( )를 사용할 수 있습니다.*)를 사용하여 너비 지정자/부호화를 형식 문자열로 하드 코딩하지 않고 에 전달합니다.

void f(const char *str, int str_len)
{
  printf("%.*s\n", str_len, str);
}

자세한 것은 이쪽.

정수값 또는*최소 필드 폭을 지정합니다.결과는 필요에 따라 공백 문자(기본값)로 채워지고 오른쪽 정렬 시 왼쪽에, 왼쪽 정렬 시 오른쪽에 채워집니다.* 를 사용하는 경우, 폭은 type int 의 추가 인수로 지정됩니다.인수 값이 음수인 경우 - 플래그가 지정되고 필드 너비가 양수입니다(주의:최소 너비는 다음과 같습니다.값은 잘리지 않습니다).

.뒤에 정수 또는 *가 붙거나 둘 다 변환 정밀도를 지정하지 않습니다.*가 사용되는 경우 정밀도는 int 유형의 추가 인수로 지정됩니다.이 인수 값이 음수일 경우 무시됩니다.숫자나 *가 사용되지 않으면 정밀도는 0으로 간주됩니다.정밀도의 정확한 효과는 아래 표를 참조하십시오.

따라서 두 변환 사양을 모두 사용해 보면

#include <stdio.h>

int main() {
    int precision = 8;
    int biggerPrecision = 16;
    const char *greetings = "Hello world";

    printf("|%.8s|\n", greetings);
    printf("|%.*s|\n", precision , greetings);
    printf("|%16s|\n", greetings);
    printf("|%*s|\n", biggerPrecision , greetings);

    return 0;
}

출력은 다음과 같습니다.

|Hello wo|
|Hello wo|
|     Hello world|
|     Hello world|

위의 코드가 올바르지 않은 것 같습니다만, (의 설명에 의하면).*수단

너비는 형식 문자열에서 지정되지 않고 형식화해야 하는 인수 앞에 추가 정수 값 인수로 지정됩니다.'

그래서 인수로 사용할 수 있는 너비를 가진 문자열입니다.

참조: http://www.cplusplus.com/reference/clibrary/cstdio/printf/

.*정밀도는 형식 문자열로 지정되지 않고 형식화해야 하는 인수 앞에 추가 정수 값 인수로 지정됩니다.

s문자열 문자

언급URL : https://stackoverflow.com/questions/7899119/what-does-s-mean-in-printf

반응형