null이 아닌 종료 문자열에 printf 사용
문자열이 있다고 가정합니다.null
종료되어 정확한 크기를 알 수 있습니다.그래서 어떻게 그 스트링을printf
C에서요? 그런 방법이 생각나는데 지금은 알 수가 없어요.
printf에는 다음과 같은 가능성이 있습니다.
printf("%.*s", stringLength, pointerToString);
아무것도 복사할 필요가 없으며 원래 문자열이나 버퍼를 수정할 필요도 없습니다.
여기 설명하겠습니다.%.*s
동작하는 장소와 동작합니다.
printf 템플릿 문자열의 변환 사양은 일반적인 형식입니다.
% [ param-no $] flags width [ . precision ] type conversion
또는
% [ param-no $] flags width . * [ param-no $] type conversion
두 번째 형식은 인수 목록에서 정밀도를 얻기 위한 것입니다.
'*'의 정밀도를 지정할 수도 있습니다.즉, (인쇄할 실제 값 이전) 인수 목록의 다음 인수가 정밀도로 사용됩니다.값은 int여야 하며 음의 경우 무시됩니다.
위해서%s
문자열 포맷, 정밀도에는 특별한 의미가 있습니다.
입력할 최대 문자 수를 나타내도록 정밀도를 지정할 수 있습니다.그렇지 않은 경우 끝 늘 문자를 포함하지 않는 문자열의 문자가 출력 스트림에 기록됩니다.
기타 유용한 변형:
"%*.*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
'programing' 카테고리의 다른 글
Android의 MVC 패턴 (0) | 2022.07.06 |
---|---|
Keytool 어플리케이션은 어디에 있나요? (0) | 2022.07.06 |
null 포인터가 모든 비트0이 아닐 때 C/C++ 코드를 올바르게 쓰는 방법 (0) | 2022.07.06 |
구성 요소를 로드하기 전에 VueX 값이 로드될 때까지 기다리십시오. (0) | 2022.07.06 |
CMAKE - 정적 라이브러리의 헤더 파일을 /usr/include에 올바르게 복사하는 방법 (0) | 2022.07.06 |