부호 없는 문자*의 길이는 어떻게 결정합니까?
부호 없는 문자*의 길이는 어떻게 결정합니까?
포인터의 실제 크기:
size_t s = sizeof(unsigned char*);
문자열의 길이를 원하는 경우:
unsigned char* bla = (unsigned char*)"blabla";
int s = strlen((char*)bla);
이상적인 세상에서는 그렇지 않습니다.C-style 문자열(NUL 종단 처리되어 길이를 측정할 수 있음)에는 char*를 사용하고 바이트 데이터(다른 매개 변수 또는 기타 매개 변수에 길이가 포함되어 있으며 가능한 한 빨리 STL 컨테이너에 포함될 수 있음)에만 unsigned char*를 사용합니다.vector<unsigned char>
또는basic_string<unsigned char>
).
근본적인 문제는 char와 unsigned char의 스토리지 표현이 동일한지에 대한 이동식 가정을 할 수 없다는 것입니다.그들은 보통 그렇지만, 그들은 허락되지 않습니다.따라서 서명되지 않은 char*에서만 작동하는 문자열과 같은 라이브러리 함수는 없으며 서명되지 않은 char*를 서명된 char*에 캐스팅하고 결과를 문자열로 처리하는 것은 일반적으로 안전하지 않습니다.char가 서명될 수 있으므로, 이것은 char*에 서명되지 않은 char*를 캐스팅하지 않는다는 것을 의미합니다.
그러나 0은 항상 부호 없는 char와 char로 표시되는 동일한 값입니다.그래서 이상적이지 않은 세계에서, 만약 당신이 어딘가에서 C 스타일의 문자열을 얻었지만 그것이 서명되지 않은 char*로 도착했다면, 당신은 (a) 그것을 char*에 캐스팅하고 그것을 계속할 수 있지만, 또한 (b) 누가 당신에게 이런 짓을 했는지 알아내서 그들에게 제발 멈춰달라고 요청할 수 있습니다.
여기에는 두 가지 의미가 있을 수 있습니다.포인터 유형이 얼마나 큰지 알고 싶으십니까?그렇다면 조스의 대답은 옳습니다.
size_t size = sizeof(unsigned char*);
포인터가 가리키는 요소의 수를 알고 싶다면 좀 더 복잡합니다.만약 이것이 C 스타일 문자열이라면 strlen 또는 일부 변형이 당신의 최선의 옵션입니다.
그러나 이것이 C 스타일 문자열과 관련이 없는 서명되지 않은 char에 대한 포인터일 뿐이라면 원하는 것을 안정적으로 달성할 수 있는 방법이 없습니다.C/C++는 길이 필드를 포인터와 연결하지 않습니다.포인터로 길이를 전달하거나 포인터와 길이를 모두 저장하는 벡터와 같은 클래스를 사용해야 합니다.
만약 당신이 C++을 사용하고 있고 그것이 부호 없는 char*의 문자열이라면, 그것을 조작하기 전에 먼저 std:: 문자열에 넣는 것이 더 낫습니다.그렇게 하면 모든 종류의 작업을 수행할 수 있으며 원하는 때마다 길이() 및/또는 용량()을 얻을 수 있습니다.
저는 당신이 배열의 크기를 일정하지 않게 만들기 위해 배열을 하고 있다고 가정합니다.할당, 설정 및 잊어버리는 경우 어레이의 실제 할당 크기를 항상 별도의 변수에 저장할 수 있습니다. 아니면 구조체/클래스를 만들 수도 있습니다.
//WARNING: memory issues not addressed here.
struct myStringStruct
{
unsigned char * string;
int len;
allocate(int size) {
len = size;
string = malloc(sizeof(unsigned char) * len);
}
}
그보다 더 복잡한 것은 std:: string을 다시 발명하는 것입니다.
포인터의 길이(int)를 원하십니까?가리키는 문자열의 길이를 원하는 경우 strlen: 예: 포인터 크기: size of (unsigned char*) 문자열 크기: strlen(unsigned char*) Multibyte 문자는 ..멀티바이트로 보고됩니다.
코드로 하면, 만약당이 c드코컴다면한일파,strlen()
함수 매개 변수가 처리할 수 있습니다.“unsigned char*”;
c는 하만 c++ 코서에, params 처수없다를 처리할 수 ."unsigned char*";
그래서 이 c.(unsigned char*)str.
부호 없는 문자[] = "샘플 문자열";
intel = 크기;
부호 없는 문자 * 해당 포인터에 위치한 문자열을 의미하는 것 같습니다.이 경우 다음과 같습니다.
strlen(your_string_pointer)
그러나 \0 위치만 찾을 수 있습니다.실제 할당된 메모리 블록 크기라는 보장은 없습니다.
언급URL : https://stackoverflow.com/questions/836549/how-do-you-determine-the-length-of-an-unsigned-char
'programing' 카테고리의 다른 글
마이크로미터를 사용하여 스프링 부트에 사용할 메트릭의 화이트리스트를 지정하는 방법 (0) | 2023.08.09 |
---|---|
자바스크립트로 로컬 디스크 파일을 여는 방법은? (0) | 2023.08.09 |
Android 기본값이 아닌 현재 로케일 가져오기 (0) | 2023.08.09 |
리눅스에서 ptrace는 어떻게 작동합니까? (0) | 2023.08.09 |
div 높이를 배경 크기로 자동 조정하려면 어떻게 해야 합니까? (0) | 2023.08.09 |