我不是 100% 确定我是否正确分配了一个包含 10 个元素的数组
char *str;
str = (int*)malloc(10 * sizeof(int));
任务是为包含 10 个元素的字符串分配内存。
我是否正确地完成了它,或者我是否必须添加“+ 1”因为末尾有“\0”。
谢谢!
最佳答案
您分配的数额超出您的需要数倍。 (准确地说是 sizeof(int)
次)。正确的应该是
#define MAXLEN 10
...
str = malloc(sizeof *str*(MAXLEN+1));
请注意,这将是 sizeof(char)
,即 1
。所以你也可以这样做
str = malloc(MAXLEN+1);
检查 malloc
的返回值,如下所示:(malloc
可能无法为请求提供服务,它可能返回空指针。重要的是
检查这个以防止以后尝试取消引用空指针)。
str = malloc(MAXLEN+1);
if(!str){
perror("malloc");
exit(EXIT_FAILURE);
}
此外,void*
到 char*
的转换是隐式的 - 您不需要转换 malloc
的返回值。
sizeof(*str)
是获取我们在 str
中为其分配内存的元素类型大小的更简洁方法。好处是当您稍后更改代码并使 str
指向将包含 int
的已分配内存时,您不需要查找 sizeof (char)
然后将其替换为 sizeof(int)
这是通过使用 sizeof(*str)
自动完成的。
关于c - 具有给定元素数量的动态创建的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48528077/