문자[]의 일부분을 C로 인쇄하는 가장 간단한 방법
예를 들면 제가.char* str = "0123456789"
처음 세 글자와 마지막 세 글자를 자르고 중간만 인쇄하려고 하는데, 가장 간단하고 안전한 방법은 무엇입니까?
자, 비결은.자를 부분과 인쇄할 부분은 크기가 다양해서 아주 긴 char*, 아니면 아주 작은 char*를 가질 수 있었습니다.
사용가능printf()
, 그리고 특별한 형식 문자열:
char *str = "0123456789";
printf("%.6s\n", str + 1);
정확도가.%s
변환 지정자는 인쇄할 최대 문자 수를 지정합니다.변수를 사용하여 런타임의 정밀도를 지정할 수도 있습니다.
int length = 6;
char *str = "0123456789";
printf("%.*s\n", length, str + 1);
이 예제에서 *는 다음 인수(length
)에 대한 정밀도가 포함될 것입니다.%s
변환, 해당 인수는 다음과 같습니다.int
.
포인터 산술을 사용하여 위와 같이 시작 위치를 지정할 수 있습니다.
[편집]
문자열이 정밀 지정자보다 짧으면 다음과 같은 문자가 더 적게 인쇄됩니다.
int length = 10;
char *str = "0123456789";
printf("%.*s\n", length, str + 5);
인쇄 예정"56789
". 항상 특정 문자 수만큼 인쇄하려면 최소 필드 너비와 정밀도를 모두 지정합니다.
printf("%10.10s\n", str + 5);
아니면
printf("%*.*s\n", length, length, str + 5);
다음을 인쇄합니다.
" 56789"
마이너스 기호를 사용하여 필드의 출력을 왼쪽으로 조정할 수 있습니다.
printf("%-10.10s\n", str + 5);
마지막으로 최소 필드 폭과 정밀도가 다를 수 있습니다.
printf("%8.5s\n", str);
는 8자 필드에 최대 5자 오른쪽 justified으로 인쇄됩니다.
로버트 갬블과 스티브는 대부분의 작품을 따로 가지고 있습니다.전체로 조립:
void print_substring(const char *str, int skip, int tail)
{
int len = strlen(str);
assert(skip >= 0);
assert(tail >= 0 && tail < len);
assert(len > skip + tail);
printf("%.*s", len - skip - tail, str + skip);
}
예제에 대한 호출:
print_substring("0123456789", 1, 3);
데이터를 수정하는 것이 괜찮다면 포인터 연산을 할 수 있습니다.str이 배열이 아닌 문자 포인터라고 가정합니다.
char string[] = "0123456789";
char *str = string;
str += 3; // "removes" the first 3 items
str[4] = '\0'; // sets the 5th item to NULL, effectively truncating the string
printf(str); // prints "3456"
개인 라이브러리에서 찾은 깨끗하고 간단한 하위 문자열 기능은 유용할 수 있습니다.
char *
substr(const char *src, size_t start, size_t len)
{
char *dest = malloc(len+1);
if (dest) {
memcpy(dest, src+start, len);
dest[len] = '\0';
}
return dest;
}
이것은 아마도 스스로 설명할 수 있지만 문자열, 시작 위치(0에서 시작), 길이를 사용하고 malloc이 실패하면 원래 문자열의 하위 문자열이나 null 포인터를 반환합니다.반환되는 포인터는 다음과 같을 수 있습니다.free
더 이상 메모리가 필요 없을 때 호출자가 호출합니다.C의 정신에서 함수는 제공된 시작 위치와 길이를 검증하지 않습니다.
printf로 할 수 있는 마법 중에 특정한 숫자의 글자만 인쇄할 수 있는 것이 있다고 생각하지만, 그것은 일반적으로 이해되거나 사용되지 않습니다.우리는 이전 직장에서 하려고 했지만 지속적으로 작동하지 못했습니다.
제가 할 일은 문자를 저장하고 문자열에 있는 문자를 무효화하고 인쇄한 다음 다시 저장하는 것입니다.
언급URL : https://stackoverflow.com/questions/256218/the-simplest-way-of-printing-a-portion-of-a-char-in-c
'sourcetip' 카테고리의 다른 글
Store and retrieve JavaScript arrays into and from HTML data attributes (0) | 2023.10.30 |
---|---|
단위 테스트에서 내 요소가 초점이 맞춰졌는지 확인하려면 어떻게 해야 합니까? (0) | 2023.10.30 |
Google Apps 스크립트 쿼리를 Maria에게 보냅니다.DB (0) | 2023.10.30 |
Mount-DiskImage와 함께 마운트된 ISOI의 드라이브 문자를 가져오려면 어떻게 해야 합니까? (0) | 2023.10.30 |
Swift를 사용하여 iOS에서 뷰 컨트롤러를 오른쪽에서 왼쪽으로 표시하는 방법 (0) | 2023.10.30 |