printf를 사용하여 널이 아닌 문자열을 어떻게 인쇄합니까?
런타임에 문자열의 길이를 알고 있다고 가정하고 printf를 사용하여 null이 아닌 문자열을 인쇄하려면 어떻게해야합니까?
printf("%.*s", length, string);
다른 인수와 함께 사용 :
printf("integer=%d, string=%.*s, number=%f", integer, length, string, number);
// ^^^^ ^^^^^^^^^^^^^^
C에서는 %.123s
형식 과 함께 출력 할 최대 길이를 지정할 수 있습니다. 이는 출력 길이가 최대 123 자임을 의미합니다. 는 123
에 의해 대체 될 수 *
길이는 printf와의 인수 대신 하드 코딩에서 이동합니다 그래서.
이는에 string
내부 널 바이트 (\ 0)를 포함하지 않는다고 가정합니다 %.123s
. 최대 길이 만 제한 하고 정확한 길이가 아니라 문자열은 여전히 널 종료로 처리됩니다.
null이 아닌 종료 문자열을 내부 null로 인쇄하려면 단일 printf를 사용할 수 없습니다. 사용 fwrite
하는 대신 :
fwrite(string, 1, length, stdout);
자세한 설명은 @MSDousti의 답변 을 참조하십시오 .
@KennyTM가 제공하는 대답은 훌륭하지만 미묘합니다.
일반적으로 문자열이 널이 아닌 "종료"이지만 중간에 널 문자가 printf("%.*s", length, string);
있으면 예상대로 작동하지 않습니다. 때문이다 %.*s
형식 문자열 묻는 printf
인쇄 할 최대 의 length
문자가 아니라 정확히 length
문자.
차라리 OP 아래의 주석에서 @William Pursell이 지적한보다 일반적인 솔루션을 사용하고 싶습니다.
fwrite(string, sizeof(char), length, stdout);
다음은 샘플 코드입니다.
#include <stdio.h>
int main(void) {
size_t length = 5;
char string[length];
string[0] = 'A';
string[1] = 'B';
string[2] = 0; // null character in the middle
string[3] = 'C';
string[4] = 'D';
printf("With printf: %.*s\n", length, string);
printf("With fwrite: ");
fwrite(string, sizeof(char), length, stdout);
printf("\n");
return 0;
}
산출:
With printf: AB
With fwrite: AB CD
참고 URL : https://stackoverflow.com/questions/2137779/how-do-i-print-a-non-null-terminated-string-using-printf
'program story' 카테고리의 다른 글
XPath 표현식에서 Regex를 사용할 수 있습니까? (0) | 2020.12.04 |
---|---|
요소의 상단 위치를 얻는 방법은 무엇입니까? (0) | 2020.12.04 |
다른 함수 내에서 함수를 어떻게 호출합니까? (0) | 2020.12.04 |
Content-Language 및 Accept-Language는 무엇입니까? (0) | 2020.12.04 |
현재 지점, 거리 및 방위각에 따라 위도 / 경도를 가져옵니다. (0) | 2020.12.04 |