这个程序编译正确 运行时为什么出错

来源:百度知道 编辑:UC知道 时间:2024/06/07 05:52:11
#include<stdio.h>
void main()
{
struct stu
{
int num;
char *name;
float score;
}boy1,boy2;
scanf("%d",&boy1.num);
printf("xingming\n");
scanf("%s",boy1.name);
printf("chengji\n");
scanf("%f",&boy1.score);
boy2=boy1;
printf("%s\n",boy2.name);
printf("%f\n",boy2.score);
}
2楼说没有分配空间 那下面程序为什么能运行呢?
main(){
struct stu
{
int num;
char *name;
char sex;
float score;
} boy1,boy2;
boy1.num=102;
boy1.name="Zhang ping";
printf("input sex and score\n");
scanf("%c %f",&boy1.sex,&boy1.score);
boy2=boy1;
printf("Number=%d\nName=%s\n",boy2.num,boy2.name);
printf("Sex=%c\nScore=%f\n",boy2.sex,boy2.score);
}

明白哩!
我也遇到过这样的问题。
原因是这样滴:

结构体中你定义的* name,是一个指针啦,只有一个指针的空间,放不下一个字符串,只能别处定义一个字符串把首地址赋给它啦!这就是为什么你的第二个程序没问题。

如果你想要由用户输入name 的话,有两种方法
1.定义一个字符串,s[10](比如说10个字符以内),scanf("%s",s); 再name=s;
2.在结构体中,定义改成char name[10];

// s.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
using namespace std;
#include<stdio.h>
void main()
{
struct stu
{
int num;
char name[20] ;
float score;
}boy1,boy2;
scanf("%d",boy1.num);
printf("xingming\n");
scanf("%s",boy1.name);
printf("chengji\n");
scanf("%f",boy1.score);
boy2=boy1;
printf("%s\n",boy2.name);
printf("%f\n",boy2.score);
}

不可能正确的
你的结构体中的姓名并没有开空间啊
自然是运行不通过的啊
你可以先给开一个大name点的空间 name[20]