문자열 크기를 바이트 단위로 구하는 방법은?
제목에서 알 수 있듯이, 저의 질문은 어떻게 문자열의 크기를 얻을 수 있는지 입니다.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'
만일 작동하지 않습니다.str
is 포인터(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
.
참조:
언급URL : https://stackoverflow.com/questions/15000544/how-to-get-the-string-size-in-bytes
'programing' 카테고리의 다른 글
LIMT와 함께 MariaDb UPDATE를 찾을 수 없습니다. (0) | 2023.11.01 |
---|---|
장고, 아약스, jQuery를 사용하여 페이지를 새로 고치지 않고 양식을 제출하는 방법? (0) | 2023.11.01 |
매개 변수화된 sql 쿼리 느리고 활성화된 오라클 세션의 최대 절전 모드 (0) | 2023.11.01 |
여러 템플릿이 포함된 AngularJS 지시문 (0) | 2023.11.01 |
WAMP 서버가 데이터베이스 파일을 저장하는 위치 (0) | 2023.11.01 |