鱼C论坛

 找回密码
 立即注册
查看: 932|回复: 3

[已解决]malloc动态申请数组,程序不长,请问是哪里有问题呢

[复制链接]
发表于 2020-11-20 21:51:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 猪猪虾 于 2020-11-20 21:52 编辑

第15行程序报错,显示 invalid conversion from 'char' to char *
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
//**************************************************************************
//实现一个洗牌程序。所谓洗牌程序,就是将所有的扑克牌放入一个数组中,
//要求把数组内的扑克牌顺序随机打乱,然后输出 
int number_of_game = 3;
char get_name(int num);

int main()
{
        int i;
        char *name = NULL;
        name  = get_name(number_of_game);
        for(i = 0; i < number_of_game; i++)
        {
                printf("the %d member's name is: %s'",i,name[i]);
        }
    free(name);
}

char get_name(int num)
{
        char *ptr = NULL;
        int i;
        ptr = (char *)malloc(num *sizeof(char));;   //*name[3];这种需要用到动态存储 
        for(i = 0;i <num;i++)
        {
                printf("enter %d member's name :",i);
                fgets(ptr[i],100,stdin);
                printf("the member's name is: %s'",ptr[i]);
        }
        return ptr;
}
最佳答案
2020-11-20 23:54:25
本帖最后由 jackz007 于 2020-11-20 23:57 编辑

        函数定义:
char get_name(int num)
        改为:
char * get_name(int num)
        注意,第 9 行的函数声明也要同时改了。
        为什么要把 main() 放在最前面,我通常都是放到最后的,因为,任何函数只要定义位置出现在调用位置之前,就不用进行声明。在本例中,楼主可以试试把 char * get_name(int num) 的函数定义从目前文件的最后位置提前到第 9 行声明这个函数的位置,这样,就不再需要像第 9 行那样的函数声明了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-20 22:00:11 | 显示全部楼层
指针只能指向已经分配空间的变量,可以是已经声明的变量,也可以是动态分配尚未命名的空间。
你这里get_name 的返回值是char,是一个常量,尚未分配空间,所以指针是不能指向它的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-20 22:41:02 | 显示全部楼层
sunrise085 发表于 2020-11-20 22:00
指针只能指向已经分配空间的变量,可以是已经声明的变量,也可以是动态分配尚未命名的空间。
你这里get_na ...

老师,我返回的不是一个指针吗,指向数组名
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-20 23:54:25 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2020-11-20 23:57 编辑

        函数定义:
char get_name(int num)
        改为:
char * get_name(int num)
        注意,第 9 行的函数声明也要同时改了。
        为什么要把 main() 放在最前面,我通常都是放到最后的,因为,任何函数只要定义位置出现在调用位置之前,就不用进行声明。在本例中,楼主可以试试把 char * get_name(int num) 的函数定义从目前文件的最后位置提前到第 9 行声明这个函数的位置,这样,就不再需要像第 9 行那样的函数声明了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 13:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表