标题:这个例子有地方看不明白,求教大神!
只看楼主
xxcyy
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2016-8-12
结帖率:66.67%
 问题点数:0 回复次数:7 
这个例子有地方看不明白,求教大神!
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char *str = (char *) malloc(100);       //这个语句中(char *)是什么意思,做什么用的,我试着去掉(char *),编译时出现“error C2440: “初始化”: 无法从“void *”转换为“char *””

    if (str = NULL)
    {
        printf("内存不足!\n");
        exit(1);                         //这个语句是什么意思,有什么用?
    }
    printf("字符被分配!");
    return 0;
}
搜索更多相关主题的帖子: 做什么 return include 
2016-08-17 12:25
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1728
专家分:3216
注 册:2015-12-2
得分:0 
(char *)强制转换分配内存的地址类型为字符型指针。后面那句错误的大概意思是类型不匹配不能赋值。
exit(1);分配失败退出。括号中应该是if(str==NULL)

[此贴子已经被作者于2016-8-17 12:40编辑过]

2016-08-17 12:39
xxcyy
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2016-8-12
得分:0 
回复 2楼 ehszt
多谢!明白了。那是不是转换不了的时候,都能强制转换。
2016-08-17 12:44
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
char *str = (char *) malloc(100);       //这个语句中(char *)是什么意思,做什么用的,我试着去掉(char *),编译时出现“error C2440: “初始化”: 无法从“void *”转换为“char *””

你用的是C编译器吗?如果是,那这就是编译器的bug了。
2016-08-17 12:53
xxcyy
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2016-8-12
得分:0 
回复 4楼 rjsp
我用的是VS2015,不知道其他编译器有没有这样的情况
2016-08-17 13:24
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
以下是引用xxcyy在2016-8-17 13:24:46的发言:

我用的是VS2015,不知道其他编译器有没有这样的情况
跟你用不用VC2015没关系,只取决于你这代码是C还是C++。
若是C代码,源文件以.c为扩展名,在VC中自动以C编译器编译之;
若是C++代码,源文件以.c++为扩展名,在VC中自动以C++编译器编译之。
2016-08-17 14:10
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
得分:0 
if (str = NULL)   ??是 ==
2016-08-17 15:23
FQYB
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:43
专家分:130
注 册:2016-7-29
得分:0 
因为malloc函数可以申请任意大小的内存空间
所以malloc函数的返回值是void*类型,方便在使用的时候强制转换为其他类型的指针,赋值给不同类型的指针变量

[此贴子已经被作者于2016-8-17 20:19编辑过]

2016-08-17 20:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-467957-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024689 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved