【发布时间】:2014-01-08 03:51:33
【问题描述】:
在动态分配chars的时候,我一直是这样操作的:
char *pCh = malloc(NUM_CHARS * sizeof(char));
然而,最近有人告诉我,使用 sizeof(char) 是多余且不必要的,因为“根据定义,char 的大小是一个字节”,所以我应该/可以这样写上面的行:
char *pCh = malloc(NUM_CHARS);
我的理解是 char 的大小取决于目标计算机上使用的本机字符集。例如,如果本地字符集是 ASCII,char 是一个字节(8 位),如果本地字符集是 UNICODE,char 必然需要更多字节(> 8 位)。
为了提供最大的可移植性,难道没有必要使用sizeof(char),因为malloc 只是分配8 位字节吗?我是不是误会malloc 和sizeof(char)?
【问题讨论】:
-
+1 用于省略右侧不必要的
(char*)演员 -
我会做
char * pCh = malloc(NUM_CHARS * sizeof(*pCh));并转向其他问题。 -
s/right/left/, 对 @Bathsheba?
-
"malloc 只分配 8 位字节" 否。虽然 malloc 分配字节是真的,但 C 将字节定义为 char 的大小。所以 malloc 总是以 sizeof(char) 为单位分配,它总是 1,不管是多少位。 malloc(N) 将分配 N*CHAR_BIT 位。
-
@nos 好评论……应该是一个答案。 :-D
标签: c unicode char malloc ascii