programing

printf를 사용하여 Null이 아닌 문자열을 인쇄하려면 어떻게 해야 하는가?

prostudy 2022. 5. 26. 23:02
반응형

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);

@M.S를 참조하십시오.자세한 설명은 두스티의 대답.

@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

반응형