별도의 서브스트링을 만들지 않고 C스트링의 특정 부분만 출력할 수 있습니까?
예를 들어 다음과 같습니다.
char* string = "Hello, how are you?";
이 문자열의 마지막 5바이트만 출력할 수 있나요?처음 5바이트는 어떻게 되나요?에 변화가 있습니까?printf
이런 일이 일어날까요?
이 문자열의 마지막 5바이트만 출력할 수 있나요?
네, 다섯 번째에서 다섯 번째 글자까지 포인터를 넘기면 됩니다.이것은, 다음의 방법으로 확인할 수 있습니다.string + strlen(string) - 5
.
처음 5바이트는 어떻게 되나요?
정밀도 지정자 사용:%.5s
#include <stdio.h>
#include <string.h>
char* string = "Hello, how are you?";
int main() {
/* print at most the first five characters (safe to use on short strings) */
printf("(%.5s)\n", string);
/* print last five characters (dangerous on short strings) */
printf("(%s)\n", string + strlen(string) - 5);
int n = 3;
/* print at most first three characters (safe) */
printf("(%.*s)\n", n, string);
/* print last three characters (dangerous on short strings) */
printf("(%s)\n", string + strlen(string) - n);
return 0;
}
네, 이 문자열의 마지막 5바이트는 다음과 같이 할 수 있습니다.
printf ("%s\n", &(string[strlen (string) - 5]));
처음 5개는 다음과 같이 할 수 있습니다.
printf ("%.5s\n", string);
이 두 가지를 조합하여 문자열 내의 서브스트링을 가져올 수도 있습니다.그 말how
인쇄 가능:
printf ("%.3s\n", &(string[strlen (string) + 7]));
스트링이 충분히 길면 동작할 수 있도록 주의해 주세요.1 문자 문자열의 마지막 5 문자를 인쇄하면 인덱스가 다음 위치에 도달하므로 정의되지 않은 동작이 발생합니다.-4
즉, 이것을 시도하기 전에 문자열 길이를 확인하십시오.
두 가지 솔루션:
같은 길이의 예측 가능한 문자열 지정 - 날짜를 예로 사용하여 HH로 분할하도록 요청했습니다.SS.DDDDD
char date[14] = "2359591234567";
[1] 읽기 쉬운 구현:
char hh[3] = {0};
char mm[3] = {0};
char ss[3] = {0};
char dec[8] = {0};
strncpy ( hh, date, 2 );
strncpy ( mm, date+2, 2 );
strncpy ( ss, date+4, 2 );
strncpy ( dec, date+6, 7 );
printf("%s:%s:%s.%s\n", hh, mm, ss, dec);
[2] 짧은 구현:
다음 중 하나:
printf("%.2s:%.2s:%.2s.%.7s\n", date, date+2, date+4, date+6);
또는 다음과 같이 입력합니다.
printf("%2.2s:%2.2s:%2.2s.%7.7s\n", date, date+2, date+4, date+6);
될 거야.
printf 대신 sprintf를 사용하여 버퍼에 복사할 수 있습니다.또한 예측 불가능한 동작을 방지하기 위해 정확한 길이를 확인합니다.
어느 경우든 출력은 다음과 같습니다.
23:59:59.1234567
언급URL : https://stackoverflow.com/questions/7780809/is-it-possible-to-print-out-only-a-certain-section-of-a-c-string-without-making
'programing' 카테고리의 다른 글
C99 stdint.h 헤더 및 MS Visual Studio (0) | 2022.07.03 |
---|---|
gdb에서 긴 문자열의 전체 값을 인쇄하려면 어떻게 해야 합니까? (0) | 2022.07.03 |
Vue 테스트 유틸리티의 "스텁된 하위 구성 요소"란 무엇입니까? (0) | 2022.07.03 |
Android Studio 오류: "매니페스트 병합 실패:Android 12인치용 앱 (0) | 2022.07.03 |
vue js에 있는 구글 맵의 infow에서 @click inside를 사용하여 함수를 트리거하는 방법은 무엇입니까? (0) | 2022.07.03 |