programing

null이 아닌 종료 문자열에 printf 사용

nicescript 2022. 7. 6. 22:22
반응형

null이 아닌 종료 문자열에 printf 사용

문자열이 있다고 가정합니다.null종료되어 정확한 크기를 알 수 있습니다.그래서 어떻게 그 스트링을printfC에서요? 그런 방법이 생각나는데 지금은 알 수가 없어요.

printf에는 다음과 같은 가능성이 있습니다.

printf("%.*s", stringLength, pointerToString);

아무것도 복사할 필요가 없으며 원래 문자열이나 버퍼를 수정할 필요도 없습니다.

여기 설명하겠습니다.%.*s동작하는 장소와 동작합니다.

printf 템플릿 문자열의 변환 사양은 일반적인 형식입니다.

% [ param-no $] flags width [ . precision ] type conversion

또는

% [ param-no $] flags width . * [ param-no $] type conversion

두 번째 형식은 인수 목록에서 정밀도를 얻기 위한 것입니다.

'*'의 정밀도를 지정할 수도 있습니다.즉, (인쇄할 실제 값 이전) 인수 목록의 다음 인수가 정밀도로 사용됩니다.값은 int여야 하며 음의 경우 무시됩니다.

: glibc 매뉴얼의 출력 변환 구문

위해서%s문자열 포맷, 정밀도에는 특별한 의미가 있습니다.

입력할 최대 문자 수를 나타내도록 정밀도를 지정할 수 있습니다.그렇지 않은 경우 끝 늘 문자를 포함하지 않는 문자열의 문자가 출력 스트림에 기록됩니다.

: glibc 매뉴얼의 기타 출력 변환

기타 유용한 변형:

  • "%*.*s", maxlen, maxlen, val오른쪽 방향 전환, 앞에 공백 삽입
  • "%-*.*s", maxlen, maxlen, val좌회전할 겁니다.

fwrite()를 사용하여 stdout 할 수 있습니다.

fwrite(your_string, sizeof(char), number_of_chars, stdout);

이렇게 하면 첫 번째 문자(number_of_chars variable에서 정의된 숫자)가 파일에 출력됩니다.이 경우 stdout(표준 출력, 화면)에 출력됩니다.

printf("%.*s", length, string)동작하지 않습니다.

즉, 최대 길이 바이트 또는 늘바이트 중 먼저 오는 바이트 중 하나를 인쇄합니다.null로 종단되지 않은 Array-of-char가 길이 전에 늘 바이트를 포함하는 경우 printf는 이 바이트에서 중지되고 계속 진행되지 않습니다.

printf("%.5s", pointerToNonNullTerminatedString);

문자열 길이는 5가 됩니다.

#include<string.h> 
int main()
{
/*suppose a string str which is not null terminated and n is its length*/
 int i;
 for(i=0;i<n;i++)
 {
 printf("%c",str[i]);
 }
 return 0;
}

난 코드를 편집했고, 다른 방식으로도 유지된다.

#include<stdio.h>
int main()
{
printf ("%.5s","fahaduddin");/*if 5 is the number of bytes to be printed and fahaduddin is the string.*/

return 0;

}

언급URL : https://stackoverflow.com/questions/3767284/using-printf-with-a-non-null-terminated-string

반응형