programing

문자열 크기를 바이트 단위로 구하는 방법은?

javamemo 2023. 11. 1. 21:56
반응형

문자열 크기를 바이트 단위로 구하는 방법은?

제목에서 알 수 있듯이, 저의 질문은 어떻게 문자열의 크기를 얻을 수 있는지 입니다.C. 사용하기 좋습니까?sizeof만약 내가 그것을 (문자열) 없이 함수에 선언했다면.malloc그 안에? 아니면, 내가 포인터로 선언한 거라면?초기화를 하면 어떨까요?malloc? 저는 철저한 답변을 받고 싶습니다.

스트렌을 사용하시면 됩니다.크기는 종결 Null 문자에 의해 결정되므로 전달된 문자열이 유효해야 합니다.

메모리 버퍼의 크기를 가져오려면 문자열을 포함하고 포인터가 있어야 합니다.

  • 동적 배열(malloc로 생성)인 경우 컴파일러는 포인터가 무엇을 가리키는지 모르기 때문에 크기를 얻는 것은 불가능합니다. ( 항목을 확인하십시오.)
  • 정적 배열일 경우 다음을 사용할 수 있습니다.sizeof크기를 측정하기 위해서입니다.

동적 배열과 정적 배열 간의 차이에 대해 혼동이 있는 경우 를 확인합니다.

null로 끝나는 문자열의 길이를 가져옵니다.

sizeof문자열이 아닌 배열의 길이를 반환합니다.포인터인 경우(char *s, 배열()이 아님char s[]포인터의 크기를 반환하므로(보통 32비트 시스템에서는 4바이트) 작동하지 않습니다.배열이 포인터로 전달되거나 반환되므로 사용할 수 있는 기능을 잃게 됩니다.sizeof배열의 크기를 확인합니다.

따라서 문자열이 전체 배열에 걸쳐 있는 경우에만 해당됩니다(예:char s[] = "stuff"), 다음을 사용합니다.sizeof정적으로 정의된 배열의 경우 원하는 것을 반환합니다(그리고 null-terminator를 찾기 위해 순환할 필요가 없으므로 더 빠릅니다)(마지막 문자가 null-terminator이면 1을 빼야 합니다).전체 배열에 걸쳐 있지 않으면 원하는 것을 반환하지 않습니다.

이 모든 것에 대한 대안은 실제로 문자열의 크기를 저장하는 것입니다.

하는 동안에sizeof는 다음과 같은 특정 유형의 문자열에 대해 작동합니다.

char str[] = "content";
int charcount = sizeof str - 1; // -1 to exclude terminating '\0'

만일 작동하지 않습니다.stris 포인터(sizeof포인터의 크기(일반적으로 4 또는 8) 또는 지정된 길이의 배열()을 반환합니다.sizeof는 지정된 길이와 일치하는 바이트 수를 반환하며, 이 바이트 수는 문자 유형에 대해 동일합니다.

그냥 사용.strlen().

사용하는 경우sizeof()그다음에 achar *str그리고.char str[]다른 답변을 드립니다.char str[]문자열의 길이( 문자열 터미네이터 포함)를 반환합니다.char *str는 포인터의 크기를 반환합니다(컴파일러에 따라 differs).

나는 다음을 사용합니다.

(strlen(string) + 1 ) * sizeof(char)

이렇게 하면 버퍼 크기가 바이트 단위로 표시됩니다.snprintf()와 함께 사용하면 다음과 같은 이점이 있습니다.

const char* message = "%s, World!";
char* string = (char*)malloc((strlen(message)+1))*sizeof(char));
snprintf(string, (strlen(message)+1))*sizeof(char), message, "Hello");

건배! 함수:size_t strlen (const char *s)

문자열 크기 바이트를 찾는 두 가지 방법이 있습니다.

첫 번째 솔루션:

# include <iostream>
# include <cctype>
# include <cstring>
using namespace std;

int main()
{
    char str[] = {"A lonely day."};
    cout<<"The string bytes for str[] is: "<<strlen(str);
    return 0;
}

두 번째 솔루션:

# include <iostream>
# include <cstring>
using namespace std;

int main()
{
    char str[] = {"A lonely day."};
    cout<<"The string bytes for str[] is: "<<sizeof(str);
    return 0;
}

두 솔루션은 서로 다른 출력을 생성합니다.이것들을 읽고 설명해 드리겠습니다.

첫 번째 솔루션은 cplusplus.com 을 사용하고 기반으로 합니다.

C 문자열의 길이는 종료 널 문자에 의해 결정됩니다. C 문자열은 문자열의 시작과 종료문자 사이의 문자 수만큼 깁니다(종료문자 자체는 포함하지 않음).

따라서 두 번째 솔루션이 잘못된 문자열 크기 바이트를 인쇄할 때 첫 번째 솔루션이 올바른 문자열 크기 바이트를 인쇄하는 이유가 설명됩니다.하지만 여전히 이해가 되지 않는다면, 계속해서 읽으세요.

두 번째 솔루션은 다음과 같이 사용합니다.sizeof문자열 크기 바이트를 찾습니다.SO 답변을 바탕으로 다음과 같이 말합니다.

sizeof("f")문자열 크기 바이트 2개를 반환해야 합니다. 하나는 'f'이고 하나는 종료 '\0'(종료 null-charter)입니다.

이것이 출력이 문자열 크기 바이트 14인 이유입니다.하나는 전체 문자열에, 하나는 '\0'에 해당합니다.


결론:

두 번째 솔루션에 대한 정답을 얻으려면 다음 작업을 수행해야 합니다.sizeof(str)-1.


참조:

  1. 문자열 리터럴 크기
  2. https://cplusplus.com/reference/cstring/strlen/ ?kw=strlen

언급URL : https://stackoverflow.com/questions/15000544/how-to-get-the-string-size-in-bytes

반응형