2010-06-25 2 views
9

를 사용하여 문자 배열을 할당과 같은 :안녕하세요 최근에 내가 온라인에 코드를 많이 보았다 malloc에 ​​

char *p = malloc(sizeof(char) * (len + 1)); 

이유는 sizeof (문자)? 그럴 필요는 없지, 안 그래? 아니면 그냥 스타일의 문제인가? 어떤 장점이 있습니까?

+1

중복 된 http://stackoverflow.com/questions/1011806/is-it-necessary-to-multiply-by-sizeof-char-when 내가 대답을 받아 들일 수는 없지만 (sizeof (char)를 생략하는 것을 더 선호한다) – user85509

답변

12

예, 스타일이 중요합니다. sizeof(char)이 항상 하나 일 것으로 예상되기 때문입니다.

반면에 malloc을 수행 할 때 sizeof(foo)을 사용하는 관용구가 가장 중요하며 코드 자체를 문서화하게 만듭니다.

유지 관리를 위해 더 좋습니다. 당신이 wcharchar에서 전환 된 경우에, 당신은 많은 생각없이

wchar *p = malloc(sizeof(wchar) * (len + 1)); 

로 전환 할 것입니다. 성명을 char *p = malloc( len + 1 );으로 바꾸는 것은 더 많은 생각이 필요합니다. 정신적 인 부담을 줄이는 것이 전부입니다.

그리고 @Nyan 코멘트에서 알 수 있듯이, 당신은 또한 제로 종료 문자열을

type *p = malloc(sizeof(*p) * (len + 1)); 

을 할 수있는 평범한 버퍼의

type *p = malloc(sizeof(*p) * len)); 

.

+0

그런 다음 왜 * p = malloc (sizeof (* type) * (len + 1))을 사용하지 않는가? ;) – Nyan

+3

오, 나는 sizeof (* p)를 의미했습니다. – Nyan

+0

@ 얀 : 물론 그게 효과가 있습니다. 필자는 이전에는 이것을 보지 못했지만, 여전히 C 프로그래머로 일한다면, len + 1 부분은 문자열과 같은 객체 일 뿐이지 만, 당신의 제안을 관용구로 채택하는 것을 고려할 것입니다. – brainjam

1

작업을 자체 문서화하는 역할을합니다. 언어는 char을 정확히 1 바이트로 정의합니다. 일부 컴퓨터가 8, 12, 16, 19 또는 30 비트 최소 주소 지정 단위 (또는 그 이상)를 가지고 있기 때문에 비트의 바이트 수를 지정하지 않습니다. 그러나 char은 항상 1 바이트입니다.

1

사양에 따르면 문자는 1 바이트이므로 반드시 선택 사항입니다. 개인적으로 일관성을 위해 항상 sizeof을 포함하지만 중요하지 않습니다.

관련 문제