programing

별도의 서브스트링을 만들지 않고 C스트링의 특정 부분만 출력할 수 있습니까?

itsource 2022. 7. 3. 23:40
반응형

별도의 서브스트링을 만들지 않고 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

반응형