c语言malloc函数的用法 20
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<malloc.h>structdata{cha...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
struct data
{
char name[10];
int number[20];
}*phonebook[100];
void Input()
{
int i,j,s;
for(i=0;i<101;i++)
{
for(j=0;j<10;j++)
{
phonebook[i]->number[j]=0;
phonebook[i]->name[j]='\0';
}
}
printf("请输入通讯录中记录数:\n");
scanf("%d",&s);
printf("请输入姓名和电话:\n");
for(i=0;i<s;i++)
{
for(j=0;j<20;j++)
scanf("%d",phonebook[i]->number[j]);
for(j=0;j<10;j++)
scanf("%c",phonebook[i]->name[j]);
}
}
int Search(struct data *x[101],char y[10])
{
int i;
int find=0;
for(i=1;i<101;i++)
{
if(strcmp(x[i]->name,y)==0)
find=i;
}
return (find);
}
void main()
{
phonebook=(struct date *)malloc(100*sizeof(struct date*));//出了什么问题,为什么不能进行强制装换?
int j;
char sname[10];
for(j=0;j<21;j++)
sname[j]='\0';
Input();
printf("Input the name which is expected to be found:\n");
gets(sname);
int nCount;
nCount=Search(phonebook,sname);
if (nCount==0)
{
for(j=1;j<101;j++)
{
puts(phonebook[j]->name);
printf(" ");
printf("%d\n",phonebook[j]->number);
}
}
else
{
puts(phonebook[nCount]->name);
printf(" ");
printf("%d\n",phonebook[nCount]->number);
}
free(*phonebook);
}
ror C2440: '=' : cannot convert from 'struct main::date *' to 'struct data *[100]'
There are no conversions to array types, although there are conversions to references or pointers to arrays
不能强制转化类型,为什么 展开
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
struct data
{
char name[10];
int number[20];
}*phonebook[100];
void Input()
{
int i,j,s;
for(i=0;i<101;i++)
{
for(j=0;j<10;j++)
{
phonebook[i]->number[j]=0;
phonebook[i]->name[j]='\0';
}
}
printf("请输入通讯录中记录数:\n");
scanf("%d",&s);
printf("请输入姓名和电话:\n");
for(i=0;i<s;i++)
{
for(j=0;j<20;j++)
scanf("%d",phonebook[i]->number[j]);
for(j=0;j<10;j++)
scanf("%c",phonebook[i]->name[j]);
}
}
int Search(struct data *x[101],char y[10])
{
int i;
int find=0;
for(i=1;i<101;i++)
{
if(strcmp(x[i]->name,y)==0)
find=i;
}
return (find);
}
void main()
{
phonebook=(struct date *)malloc(100*sizeof(struct date*));//出了什么问题,为什么不能进行强制装换?
int j;
char sname[10];
for(j=0;j<21;j++)
sname[j]='\0';
Input();
printf("Input the name which is expected to be found:\n");
gets(sname);
int nCount;
nCount=Search(phonebook,sname);
if (nCount==0)
{
for(j=1;j<101;j++)
{
puts(phonebook[j]->name);
printf(" ");
printf("%d\n",phonebook[j]->number);
}
}
else
{
puts(phonebook[nCount]->name);
printf(" ");
printf("%d\n",phonebook[nCount]->number);
}
free(*phonebook);
}
ror C2440: '=' : cannot convert from 'struct main::date *' to 'struct data *[100]'
There are no conversions to array types, although there are conversions to references or pointers to arrays
不能强制转化类型,为什么 展开
2个回答
展开全部
能强制转换的。你右边强制转换的是结构体的一个指针,左边呢?没见到过。你左边要么是*phonebook 要么phonebook[100]. *phonebook[100]是指向指针的指针。malloc函数返回的是一个地址,但是你不知道这个地址到底是要给一个什么变量的。所以要明确的强制转换。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
出现了两个错误:1、phonebook=(struct date *)malloc(100*sizeof(struct date*));这个语句中的(struct date *)应该是(struct data *),这个是楼主太粗心了。2、这里的类型明显不匹配,phonebook的类型是指向struct data结构体的指针数组,struct data *的类型是指向struct data结构体的指针。我没有看具体程序是什么功能,若是改成这样程序运行是没有错误的。phonebook[0]=(struct data*)malloc(100*sizeof(struct data));
追问
phonebook[0]只对这一个变量进行了分配动态空间,而其他99个指针怎么进行空间拓展?
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询