首页 > C语言中malloc问题? sizeof?

C语言中malloc问题? sizeof?

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;
}
【热门文章】
【热门文章】