[c] 널이 아닌 종료 문자열과 함께 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 왼쪽 정렬됩니다.

답변

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;

}


답변