C语言中malloc分配内存
比如下面的方法:
char *foo(char *name){
char *str=malloc(strlen(name)+1);//我这里有点纠结
return str;
}
上面方法中使用malloc分配内存,我有点纠结该分配多少?
我看到的:
strlen(name)+1
sizeof(char)+strlen(name)+1
sizeof(char *)+strlen(name)+1
如果是对于int 或者是struct的类型 ? 我该怎么分配
对于字符串用strlen(name) + 1
, 其中strlen(name)
是为了保存字符串, +1
是为了添加字符串结束符'\0'
;
其它情况通常用sizeof(xxx)
即可.
strlen
返回字符串的长度,不包括结尾的\0,所以如果你要复制一个字符串的话,当然是strlen(name)+1
。
后面两种你从哪儿扯出来的?
如果将一个数组作为参数传给函数,会退化成普通指针,所以在函数内部分配的话不能简单实用sizeof
,例如:
char *foo(char *name)
{
char *str = malloc(sizeof(name)); // 实际只分配了一个char *大小
return str;
}
strlen
求的是字符串有效字符的个数,不包括作为结束符的'\0'
,所以有+1
的操作。如果传递的是内置类型或者结构体类型,直接使用类型名作为sizeof
的操作对象即可:
typedef struct String {
char *str;
int len;
} String;
String *foo()
{
String *str = (String *)malloc(sizeof(String)); // 分配一个String结构
return str;
}