结构体指针的问题!

来源:百度文库 编辑:神马文学网 时间:2024/04/28 11:17:32

主  题:  结构体指针的问题! 
作  者:  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