猪猪虾 发表于 2020-11-20 21:51:50

malloc动态申请数组,程序不长,请问是哪里有问题呢

本帖最后由 猪猪虾 于 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);
        }
    free(name);
}

char get_name(int num)
{
        char *ptr = NULL;
        int i;
        ptr = (char *)malloc(num *sizeof(char));;   //*name;这种需要用到动态存储
        for(i = 0;i <num;i++)
        {
                printf("enter %d member's name :",i);
                fgets(ptr,100,stdin);
                printf("the member's name is: %s'",ptr);
        }
        return ptr;
}

sunrise085 发表于 2020-11-20 22:00:11

指针只能指向已经分配空间的变量,可以是已经声明的变量,也可以是动态分配尚未命名的空间。
你这里get_name 的返回值是char,是一个常量,尚未分配空间,所以指针是不能指向它的

猪猪虾 发表于 2020-11-20 22:41:02

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

老师,我返回的不是一个指针吗,指向数组名

jackz007 发表于 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 行那样的函数声明了。
页: [1]
查看完整版本: malloc动态申请数组,程序不长,请问是哪里有问题呢