제목이 암시하듯,제 질문은 얻는 방법을 문자열의 크기에C
. 을 사용하는 것이 좋다sizeof 면
나는've 선언(문자열)함수에서없이malloc
에서 그것은? 는 경우 또는,나는've 선언 포인터로? 어떤 경우 내가 초기화되 그것으로malloc
? 하고 싶은 철저한 반응이다.
사용strlen
을 얻는 길이null 로 끝나는 문자열.
sizeof
의 길이를 반환편지의 문자열입니다. 경's 는 포인터(char*s
),지 array(char s[]
),상't 업을 것이기 때문에,돌의 크기는 포인터(일반적으로 4 개의 바이트에서 32 비트 시스템). 내가 믿는 배열 전달됩니다 또는 반환되는 포인터로,그래서 당신이'd 하는 능력을 잃는 사용sizeof
을 확인 배열의 크기.
그래서,는 경우에만 문자열에 걸쳐 전체 배열(예를 들어char s[]="물건"
),를 사용하는 것sizeof
대정적으로 정의배열을 반환 당신이 원하는 무엇(고 있으로 빠르게 되't 필요가 루프를 통해 찾을 수 있 null 터미네이터)(는 경우 마지막 문자가 null 로 종결,당신이 필요합니다면 빼기 1)입니다. 지 않는 경우't span 전체 배열,상't 익 당신이 무엇을 원합니다.
대체하는 이 모든 것은 실제로 저장하는 크기의 문자열입니다.
는 동안sizeof
에 대한 작품이 특정 유형의 문자열:
char str[] = "content";
int charcount = sizeof str - 1; // -1 to exclude terminating '\0'
그것은 작동하지 않는 경우str
는 포인터(sizeof
반환한 크기의 포인터,일반적으로 4 또는 8)또는 배열과 길이를 지정(sizeof
이 반환됩니다 바이트수가 일치하는 길이를 지정하는 char 형은 동일합니다).
사용strlen()
.
나는 사용:
(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");
Cheers! 기능:size_t strlen(const char*s)