结构体指针的问题!

来源:百度文库 编辑:神马文学网 时间:2024/10/03 02:44:28
主  题:  结构体指针的问题!
作  者:  darkdragon1981 (darkdragon1981)
等  级:
信 誉 值:  100
所属社区:  C/C++ C语言
问题点数:  40
回复次数:  12
发表时间:  2005-10-16 22:18:16
我想把从文件里面读出来的n个结构体信息,存到一个结构体的数组里面,方便操作!我用的是c语言!我的那段程序为:
typedef struct book
{
char booknum[10];
char bookname[50];
char bookpublish[50];
float bookprice;
}book;
book * pmybook;
pmybook = malloc(sizeof(book)*100);
pmybook->booknum = "aaaa";
pmybook->bookname = "asdf";
pmybook->bookpublish = "asdfasdf";
pmybook->bookprice = 1.32;
报错在负值阶段,总是说:错误 keshel~1.c 237: 需要逻辑0或非0在 main 函数中,不知道什么意思?我在csdn搜了结构体指针的文章,但是看不太懂,哪位大哥能给我指点一下,不胜感激!过两天就该交课设,急!谢谢!
回复人: kindred(血族) ( ) 信誉:100  2005-10-16 22:29:00  得分: 0
pmybook[i].booknum = "aaaa";
可以吗?
Top
回复人: VZMJ(阿吉) ( ) 信誉:99  2005-10-16 22:41:00  得分: 0
是不是應該用字fu串拷备含数
Top
回复人: fiftymetre(我肉身填补你的欲望.你用什么填补我的灵魂) ( ) 信誉:100  2005-10-16 22:43:00  得分: 0
book * pmybook;
pmybook = malloc(sizeof(book)*100);
pmybook->booknum = "aaaa";
pmybook->bookname = "asdf";
pmybook->bookpublish = "asdfasdf";
pmybook->bookprice = 1.32;
这几行语句不能写在函数外部,应该写在自函数或者main里面
另外,给字符串赋值不能直接=的,要用strcpy
strcpy(pmybook->booknum, "aaaa");
strcpy(pmybook->bookname, "asdf");
strcpy(pmybook->bookpublish, "asdfasdf");
Top
回复人: K() ( ) 信誉:70  2005-10-16 23:46:00  得分: 0
回复人: VZMJ(阿吉) ( ) 信誉:99
是不是應該用字fu串拷备含数
没cuo
Top
回复人: ruiding(瑞丁) ( ) 信誉:100  2005-10-16 23:47:00  得分: 0
我觉得 malloc 的分配是要有类型的,如果前面没有强制类型转换可能不太对。
试试   pmybook =(book *) malloc(sizeof(book)*100);
Top
回复人: lvyao1011() ( ) 信誉:100  2005-10-17 09:54:00  得分: 0
字符数组在初始化的时候可以用“=”;
但是符值的时候是不是应该用strcpy?
Top
回复人: majinyi(毛毛) ( ) 信誉:100  2005-10-17 15:07:00  得分: 0

只能用strcpy
Top
回复人: ww51xh(VC菜鸟) ( ) 信誉:99  2005-10-17 15:21:00  得分: 0
呵,对字符数组不能那样赋值,应该用
strcpy或者memcpy
char *strcpy( char *strDestination, const char *strSource );
wchar_t *wcscpy( wchar_t *strDestination, const wchar_t *strSource );
void *memcpy( void *dest, const void *src, size_t count );
Top
回复人: goodluckyxl(被人遗忘的狗) ( ) 信誉:134  2005-10-17 15:22:00  得分: 0
pmybook->booknum = "aaaa";
pmybook->bookname = "asdf";
pmybook->bookpublish = "asdfasdf";
//这个字符串是不能直接赋值的
//booknum bookname...都是 是char* const c中没有重载的概念
//对const对象赋值是不行的 必须用拷贝或者循环赋值
Top
回复人: zgy166(昆深) ( ) 信誉:110  2005-10-17 16:12:00  得分: 0
狗狗说得对极了
Top
回复人: fuyong214(傅勇) ( ) 信誉:100  2005-10-18 00:41:00  得分: 0
错误原因: malloc(sizeof(book)*100)返回的是(void *)类型的指针,
pmybook数据类型为(book *) ,把一个 void 类型的指针
赋给book类型的指针肯定是错误的哈。应该改为
pmybook=(book *)(malloc(sizeof(book)*100))
Top
回复人: lijun51888(sun) ( ) 信誉:100  2005-10-18 09:26:00  得分: 0
要强制类型转换pmybook=(book *)(malloc(sizeof(book)*100))
符值的时候应该用strcpy
pmybook=(book *)(malloc(sizeof(book)*100))也不能分配出100个这种类型空间,应一个一个申请空间
pmybook=(book *)(malloc(sizeof(book))
Top