鱼C论坛

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

[已解决]结构体指针赋值的问题

[复制链接]
发表于 2021-1-25 11:24:06 | 显示全部楼层 |阅读模式

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

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

x
如下代码:
执行后无法输出,但是把指针赋值代码屏蔽完全用数组就可以了,请教问题出在哪里?
#include <stdio.h>
#include<string.h>
#include <stdlib.h>


struct Book
{
    char name[10];
    int num;
}class1[2];

int main() {
        struct Book *pa;
        pa = (struct Book *)malloc(sizeof(struct Book));
        
        int i;
        for(i=0; i<2; i++) 
        {
                char str[10];
                gets(str);
                strcpy(class1[i].name,str);
                strcpy(pa->name,str);
                
                int number;
                scanf("%d",&number);
                getchar();
                pa->num = number;
                class1[i].num = number;
                pa ++;
        }
        
        //pa = pb;
        
        for (i = 0;i< 2;i++)
        {
                //printf("name is %s,num is %d\n",pa->name,pa->num);
                printf("name is %s,num is %d\n",class1[i].name,class1[i].num);
                //pa ++;
        }
        
        return 0;
}
最佳答案
2021-1-25 11:41:22
本帖最后由 小甲鱼的铁粉 于 2021-1-25 11:42 编辑

有两处错误,第一处是定义时
pa = (struct Book *)malloc(sizeof(struct Book));
这里应该是两个内存空间,2 * sizeof(struct Book)
第二处是输入之后,pa++执行了两次,要让它回去之前的地址,就要 pa -= 2
正确代码如下
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <stdio.h>
#include<string.h>
#include <stdlib.h>


struct Book
{
    char name[10];
    int num;
}class1[2];

int main() {
        struct Book *pa;
        pa = (struct Book *)malloc(2*sizeof(struct Book));//做了修改
 
        int i;
        for(i=0; i<2; i++) 
        {
                char str[10];
                gets(str);
                strcpy(class1[i].name,str);
                strcpy(pa->name,str);
                
                int number;
                scanf("%d",&number);
                getchar();
                pa->num = number;
                class1[i].num = number;
                pa ++;
        }
        pa -= 2;//做了修改
        //pa = pb;
        
        for (i = 0;i< 2;i++)
        {
                printf("name is %s,num is %d\n",pa->name,pa->num);
                printf("name is %s,num is %d\n",class1[i].name,class1[i].num);
                pa ++;
        }
        system("pause");
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-25 11:41:22 | 显示全部楼层    本楼为最佳答案   
本帖最后由 小甲鱼的铁粉 于 2021-1-25 11:42 编辑

有两处错误,第一处是定义时
pa = (struct Book *)malloc(sizeof(struct Book));
这里应该是两个内存空间,2 * sizeof(struct Book)
第二处是输入之后,pa++执行了两次,要让它回去之前的地址,就要 pa -= 2
正确代码如下
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <stdio.h>
#include<string.h>
#include <stdlib.h>


struct Book
{
    char name[10];
    int num;
}class1[2];

int main() {
        struct Book *pa;
        pa = (struct Book *)malloc(2*sizeof(struct Book));//做了修改
 
        int i;
        for(i=0; i<2; i++) 
        {
                char str[10];
                gets(str);
                strcpy(class1[i].name,str);
                strcpy(pa->name,str);
                
                int number;
                scanf("%d",&number);
                getchar();
                pa->num = number;
                class1[i].num = number;
                pa ++;
        }
        pa -= 2;//做了修改
        //pa = pb;
        
        for (i = 0;i< 2;i++)
        {
                printf("name is %s,num is %d\n",pa->name,pa->num);
                printf("name is %s,num is %d\n",class1[i].name,class1[i].num);
                pa ++;
        }
        system("pause");
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-25 11:56:55 | 显示全部楼层
小甲鱼的铁粉 发表于 2021-1-25 11:41
有两处错误,第一处是定义时
这里应该是两个内存空间,2 * sizeof(struct Book)
第二处是输入之后,pa++ ...

感谢指点,追加2个问题:

1、这段代码我放在main函数外面定义就报错了
struct Book *pa;
pa = (struct Book *)malloc(2*sizeof(struct Book));

2、这样定义也报错
struct Book
{
    char name[10];
    int num;
}class1[2],*pa=&class1;

初学基础知识不扎实,请指点敏捷
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-25 14:57:10 | 显示全部楼层
dysow 发表于 2021-1-25 11:56
感谢指点,追加2个问题:

1、这段代码我放在main函数外面定义就报错了

放在main函数外面就是全局变量,定义时就要初始化,分配好内存空间
struct Book
{
    char name[10];
    int num;
}class1[2];

struct Book *pa = (struct Book *)malloc(2*sizeof(struct Book));

int main() {
    //省略
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 08:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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