如果以下任何一项是正确的并且被认为是创建能够容纳 100 个字符的 char 字符串的最佳实践?
char * charStringA = malloc(100);
char * charStringB = malloc(sizeof(char)*100);
char * charStringC = (char*)malloc(100);
char * charStringD = (char*)malloc(sizeof(char)*100);
最佳答案
char * charStringA = malloc(100);
char * charStringB = malloc(sizeof(char)*100);
两者同样正确。
此评估中应考虑的两个要点是:
char
的大小由 C 标准保证为一个字节。void
指针可以分配给任何指针,而无需在 C 中进行显式转换,并且不需要进行转换。强制转换malloc
的返回值被认为是一种不好的做法,原因如下:
What's wrong with casting malloc's return value?
以上答案适用于 OP 中提到的选项。更好的做法是使用 sizeof
,而不对任何类型 的大小做任何假设。这就是 sizeof
存在的原因和目的。在这种情况下,最佳做法是使用:
char * charStringB = malloc(sizeof(*charStringB)*100);
请注意 *charStringB
与 char
相同,但这为您提供了灵 active ,如果您以后想更改 type 则可以需要记住进行修改的地方更少。
关于c - malloc 的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14099967/