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 여야하며 음수이면 무시됩니다.
— glibc 매뉴얼의 출력 변환 구문
들어 %s
문자열 형식, 정밀도는 특별한 의미가 있습니다 :
쓸 최대 문자 수를 나타 내기 위해 정밀도를 지정할 수 있습니다. 그렇지 않으면 종료 널 문자를 포함하지 않는 문자열의 문자가 출력 스트림에 기록됩니다.
— 기타 출력 변환 glibc 매뉴얼의
기타 유용한 변형 :
"%*.*s", maxlen, maxlen, val
오른쪽 정렬하고 앞에 공백을 삽입합니다."%-*.*s", maxlen, maxlen, val
왼쪽 정렬됩니다.
답변
stdout에 fwrite ()를 사용할 수 있습니다!
fwrite(your_string, sizeof(char), number_of_chars, stdout);
이렇게하면 첫 번째 문자 (number_of_chars 변수에 정의 된 숫자)를 파일,이 경우 stdout (표준 출력, 화면)에 출력합니다!
답변
printf("%.*s", length, string)
작동 안 할 것이다.
이것은 최대 길이 바이트 또는 널 바이트 중 먼저 오는 것을 인쇄하는 것을 의미합니다. null로 끝나지 않는 char 배열에 길이 전에 null 바이트가 포함되어 있으면 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;
}