段错误,结构体指针,结构体成员指针初始化


今天在结构体中使用字符指针,莫名出现段错误。经过查询才知道是成员指针没有初始化!

看看错误代码:

#include <bits\stdc++.h>

#pragma warning(disable:4996)
using namespace std;

char s[2] = { 0 };

struct student {
    char *m_name;
    char *m_num;
    char *m_project;
    int m_grade;
}stu;

void Input();
//输入学生信息函数
void Output();
//输出学生信息

int main()
{
    Input();
    Output();
    system("PAUSE");
    return 0;
}

void Input() {
    /*cin >> stu.m_name;
    cin >> stu.m_num;
    cin >> stu.m_project;
    cin >> stu.m_grade;*/
    strcpy(stu.m_num, "170564564");
    strcpy(stu.m_name, "刘然");
    strcpy(stu.m_project, "语言");
    stu.m_grade = 88;
}

void Output() {
    cout << "姓名:" << stu.m_name << endl;
    cout << "学号:" << stu.m_num << endl;
    cout << "科目:" << stu.m_project << endl;
    cout << "成绩:" << stu.m_grade << endl;
}

在Input()函数中,未对成员变量字符指针初始化就使用,程序会报错。

初始化的方法在网上有两种:1.将其他变量的内存地址给字符指针 2.重新分配一块内存给指针。但是实测第一种方法没有作用。

第二种方法申请空间,就使用malloc或者new就行了,malloc,new实际上就是系统分配一块内存,一个临时指针指向这块内存,然后将这个临时指针给左值。

成员指针:
stu.m_name = (char*)malloc(sizeof(char))

stu.m_name = new char[1];

结构体指针:
stu = (struct student*)malloc(sizeof(struct student));
  stu->m_name = (char*)malloc(sizeof(char));

 

 

#include <bits\stdc++.h>

#pragma warning(disable:4996)
using namespace std;

char s[2] = { 0 };

struct student {
    char *m_name;
    char *m_num;
    char *m_project;
    int m_grade;
}stu;

void Input();
//输入学生信息函数
void Output();
//输出学生信息

int main()
{
    Input();
    Output();
    system("PAUSE");
    return 0;
}

void Input() {

    stu.m_name = new char[1];
    stu.m_num = new char[1];
    stu.m_project = new char[1];
    
    strcpy(stu.m_num, "170564564");
    strcpy(stu.m_name, "刘然");
    strcpy(stu.m_project, "语言");
    stu.m_grade = 88;
}

void Output() {
    cout << "姓名:" << stu.m_name << endl;
    cout << "学号:" << stu.m_num << endl;
    cout << "科目:" << stu.m_project << endl;
    cout << "成绩:" << stu.m_grade << endl;
}

 

当然使用字符数组就没压力了,C语言指针果然“你大爷就是你大爷”。   手动滑稽.jpg


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM