반응형
printf 문자열, 가변 길이 항목
#define SIZE 9
int number=5;
char letters[SIZE]; /* this wont be null-terminated */
...
char fmt_string[20];
sprintf(fmt_string, "%%d %%%ds", SIZE);
/* fmt_string = "%d %9d"... or it should be */
printf(fmt_string, number, letters);
더 좋은 방법이 있을까요?
특별한 형식 문자열을 작성할 필요가 없습니다. printf를 사용하는 경우 파라미터(값 앞에 있음)를 사용하여 정밀도를 지정할 수 있습니다..*형식 태그의 정밀도로 지정합니다.
예를 들어 다음과 같습니다.
printf ("%d %.*s", number, SIZE, letters);
주의: 너비(필드의 최소 너비)와 정밀도(인쇄할 최대 글자 수)에는 차이가 있습니다. %*s너비를 지정합니다.%.s에 정밀도를 지정합니다.(또한%*.*단, 2개의 파라미터가 필요합니다.하나는 폭에 1개는 정밀도에 1개입니다.)
printf man 페이지(man 3 printfLinux의 경우) 및 특히 필드 폭과 정밀도에 대한 섹션을 참조하십시오.
10진수 문자열 대신 "*" 또는 "*m$"(일부 10진수 정수 m의 경우)로 입력하여 다음 인수 또는 m-th 인수 각각에서 정밀도가 지정되도록 지정할 수 있습니다.이 인수는 int 유형이어야 합니다.
미지의 함수는 입니다.첫 번째 파라미터는**char이 기능은malloc부기 작업을 하지 않아도 됩니다.잊지 말고free스트링을 입력합니다.
char *fmt_string;
asprintf(&fmt_string, "%%d %%%ds", SIZE);
printf(fmt_string, number, letters);
free(fmt_string);
는 사용 예시입니다.
언급URL : https://stackoverflow.com/questions/5932214/printf-string-variable-length-item
반응형
'programing' 카테고리의 다른 글
| 반복된 typedefs - C에서는 유효하지 않지만 C++에서는 유효합니다. (0) | 2022.07.30 |
|---|---|
| vdso와 vsyscall이 뭐죠? (0) | 2022.07.30 |
| Vue.js: 컴포넌트 인스턴스가 마운트된 시기를 알 수 있는 방법이 있습니까? (0) | 2022.07.30 |
| Vue2는 페이지를 새로 고칠 때 기본 페이지로 리디렉션됩니다. (0) | 2022.07.30 |
| 본질이란 무엇인가? (0) | 2022.07.30 |