Dùng char* để nhập tên sinh viên và gặp lỗi

#include "Header03.h"

void nhap(SinhVien a[], int n)
{
	
	for (int i = 0; i < n; i++)
	{
		cout << "moi ban nhap thong tin cua sinh vien thu " << i + 1 << endl;
		cout << "Ho va ten: ";
		cin.ignore();
		cin.getline((a + i)->hoTen,51);
		cout << "Diem toan ";
		cin >> (a + i)->diemToan;
		cout << "Diem ly ";
		cin >> (a + i)->diemLy;
		cout << "Diem hoa ";
		cin >> (a + i)->diemHoa;
		cout << "\t";
	}
}

void xuat(SinhVien a[], int n)
{
	for (int i = 0; i < n; i++)
	{
		cout << "Ho ten: " << (a + i)->hoTen << endl;
		cout << "Diem toan: " << (a + i)->diemToan << endl;
		cout << "Diem " << (a + i)->diemLy << endl;
		cout << "Diem " << (a + i)->diemHoa << endl;
		cout << "\t";
	}
}

#pragma once
#include <conio.h>
#include <iostream>
#define N 1000
using namespace std;

struct SinhVien
{
	char* hoTen;
	float diemToan;
	float diemLy;
	float diemHoa;
};
void nhap(SinhVien a[], int n);
void xuat(SinhVien a[], int n);

#include "Header03.h"
int main()
{
	int n;
	do
	{
		cout << "moi ban nhap vao so luong sinh vien     " << endl;
		cout << "luu y chi duoc nhap toi da 10 sinh vien " << endl;
		cin >> n;
	} while (n < 0 || n > 10);
	SinhVien sv[11];
	nhap(sv, n);
	xuat(sv, n);
	return 0;
}

Mình dùng char thì không sao nhưng khi dùng char* thì lại bị breakpoint, mọi người giúp mình với.

Code C++ sao không dùng std::string vậy bạn?


Có cần phải cấp phát char* với 1 số lượng nhất định không nhỉ :thinking: mình không dùng char* bao giờ nên không rõ.

1 Like

> khi dùng char* thì lại bị breakpoint
Bạn sử dụng con trỏ nhưng bạn chưa cấp phát cho con trỏ đó.
Bạn đang access vào một vùng nhớ nhưng vùng nhớ đó không hợp lệ.
-> Error

Để giải quyết tình huống này thì bạn phải cấp phát vùng nhớ cho con trỏ.
Ví dụ:
hoTen = new char[50];

Note: new rồi thì nhớ delete
Bạn có thể new trong constructor và delete trong destructor.

Nếu bạn chưa control được việc cấp phát thì tốt nhất cứ sử dụng std::string.
Thay vì sử parameter = mảng thì có thể chuyển sanh std::vector

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?