반응형
printf를 사용하여 Null이 아닌 문자열을 인쇄하려면 어떻게 해야 하는가?
런타임에 문자열 길이를 안다고 가정하여 printf를 사용하여 Null이 아닌 문자열을 인쇄하려면 어떻게 해야 하는가?
printf("%.*s", length, string);
다른 아그와 함께 사용:
printf("integer=%d, string=%.*s, number=%f", integer, length, string, number);
// ^^^^ ^^^^^^^^^^^^^^
C에서 를 사용하여 출력할 최대 길이를 지정할 수 있다.%.123s
형식을 갖추다이것은 출력 길이가 최대 123자임을 의미한다.그123
으로 대체될 수 있다.*
, 그래서 그 길이를 하드 디스크 대신에 printf의 논쟁에서 뺐다.
이는 다음과 같은 경우를 가정해 보십시오.string
다음과 같이 내부 null 바이트(\0)를 포함하지 않음%.123s
정확한 길이가 아닌 최대 길이만 구속하고 문자열은 여전히 null-message로 처리된다.
내부 null이 아닌 문자열을 null로 인쇄하려면 단일 인쇄를 사용할 수 없다.사용하다fwrite
대신:
fwrite(string, 1, length, stdout);
@Kenny가 제공한 대답TM은 훌륭하지만 섬세하다.
일반적으로 문자열은 null이 아닌 "종료됨"이지만 중간에 null 문자가 있는 경우printf("%.*s", length, string);
예상대로 작동하지 않는다.그 이유는%.*s
형식 문자열 요청printf
최대 의 인쇄를 하다length
꼭 그렇지는 않은 문자 length
성격.
차라리 OP 아래의 논평에서 @윌리엄 지갑이 지적한 보다 일반적인 해결책을 사용하겠다.
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
반응형
'programing' 카테고리의 다른 글
Vuejs - 이미지 URL이 유효한지 또는 손상된지 확인 (0) | 2022.05.26 |
---|---|
Windows의 명령줄에서 Java 프로그램을 실행하는 방법 (0) | 2022.05.26 |
상태 항목의 값을 증가시키는 방법 (0) | 2022.05.26 |
렌더링된 vue에서 html 자리 표시자 특성을 이스케이프하는 방법 (0) | 2022.05.26 |
C에서 함수 호출 재정의 (0) | 2022.05.26 |