我不是100%确定我是否正确分配了一个包含10个元素的数组
char *str;
str = (int*)malloc(10 * sizeof(int));
任务是分配10个元素的字符串内存。
我是否已正确完成或是否必须添加" + 1"因为' \ 0'最后。
谢谢!
答案 0 :(得分:6)
您分配的次数超过了您的需要。 (准确地说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)
完成的。