01/10/2018, 00:58

Lỗi C4996 Visual 2015

Em khả năng code của em còn kém mà trình độ tiếng anh của em cũng thấp, mong mọi người xem dùm em lỗi này phải sửa sao ạ :(.

Đây là CODE của em, em đang test thử để hoàn thiện bài thì xảy ra lỗi, mong mọi người xem dùm:

#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#define MAX 100
typedef struct Node {
	int a[MAX];
	int size;
};
void init(Node *head) 
{
	Node *p = head;
	p->size = 0;
}
int isfull(Node *head) 
{
	if(head->size==MAX)	return 1;
	else return 0;
}
int isempty(Node *head)
{
	if(head->size==0) return 1;
	else return 0;
}
void input(Node *head,FILE *f)
{
	f = fopen("D:\test.txt", "wb");
	Node *p = head;
	int n;
	printf("so luong phan tu nhap vao danh sach la:");
	fscanf_s(f,"%d", &n);
	p->size = n;
	printf("
nhap phan tu ghi vao:");
	for (int i = 0; i <= p->size-1; i++)
	{
		printf("
phan tu thu %d:	");
		scanf_s("%d", &p->a[i]);
	}
	for (int i = 0; i <= p->size - 1; i++)
	{
		fwrite(p->a, sizeof(p->a), 1, f);
	}
}
int insert(int k, Node *head,FILE *f)
{
	Node *p = head;
	if (isfull(p))
	{
		printf("
danh sach day");
		return 0;
	}
	if (isempty(p)==1)
	{
		int k;
		printf("
danh sach rong");
		printf("
1: nhap lai danh sach 
");
		printf("
2: Exit");
		scanf_s("%d", &k);
		switch (k)
		{
		case 1: input(p,f); break;
		case 2: break;
		default:
			break;
		}

		
	}
	if (k<0 || k>p->size) 
	{
		printf("
gia tri K khong hop le");
	}
	//them phan tu k vao 1 vi tri trong danh sach
	p->size++;
	for (int i = p->size-1; i >= k; i--)
	{
		p->a[i] = p->a[i - 1];
	}
	int x;
	printf("
phan tu them vao:	");
	scanf_s("%d", &x);
	p->a[k - 1] = x;
	return 1;
}
int remove_k(Node *head, int k)
{
	Node *p = head;
	if (isempty(p)==1)
	{
		printf("
danh sach rong");
		return 0;
	}
	p->a[k - 1] = 0;
	for (int i = k - 1; i <= p->size-2; i++)
	{
		p->a[i + 1] = p->a[i];
	}
	p->size--;
	return 1;
}
int output(Node *head,FILE *f)
{
	f = fopen("D:\test.txt", "rb");
	Node *p = head;
	/*if (isempty(head)) {
		printf("
danh sach rong");
		return 0;
	}*/
	printf("
danh sach LK:");
	for (int i = 0; i <= p->size-1; i++)
	{
		fread(p->a,sizeof(p->a),1,f);
	}
	return 1;
}
int search(Node *head,int x)
{
	Node *p = head; int *b; int m=0;
	b = (int*)malloc(sizeof(int));
	if (isempty(head)==1)
	{
		printf("
danh sach rong");
		return 0;
	}
	for (int i = 0; i <= p->size - 1; i++)
	{
		if (p->a[i] == x)
		{		
			m++;
			*(b+m) = i + 1;
		}
	}
	if(m==1) printf("
x thuoc phan tu thu: %d", *(b+m));
	if (m >= 2)
		{
			printf("
co %d phan tu trung nhau:", m);
			for (int j = 1; j <= m; j++)
			{
				printf("
phan tu %d",*(b+j));
			}
		}
	if (m = 0) printf("
khong co phan tu ban muon tim");
	return 1;
}
void select(Node *head,FILE *f)
{
	printf("
nhap lua chon ban muon:");
	int luachon;
	scanf_s("%d", &luachon);
	Node *p = head;
	switch (luachon) {
	case 1: {
		if (isempty(head)==1)	printf("
danh sach rong");
		else printf("
so phan tu cua DS : %d", p->size);
		output(head,f);
		select(head,f);
		
	}
	case 2:
	{
		int k;
		printf("
chon vi tri ban muon chen:	");
		scanf_s("%d", &k);
		insert(k, head,f);
		select(head,f);
	}
	case 3:
	{
		int x;
		printf("
nhap gia tri ban muon tim:");
		scanf_s("%d", &x);
		search(head, x);
		select(head,f);
	}
	case 4:
	{
		int k;
		printf("
phan tu ban muon xoa:");
		scanf_s("%d", &k);
		remove_k(head, k);
		select(head,f);
	}
	case 5:
	{
		printf("
chọn 4 để tìm ô chứa giá trị");
		printf("
chọn 5 để xóa ô chứa đó ");
	}
	case 6:
	{
		input(head,f);
		select(head,f);
	}
	case 7: 
		break;
	}

	
}
int main()
{
	FILE *f;
	Node *head;
	head = (Node*)malloc(sizeof(Node));
	init(head);
	input(head,f);
	output(head,f);
	printf("Moi ban chon phep toan voi DS LKD:");
	printf("
1: Kiem tra DS");
	printf("
2: Chen phan tu x vao vi tri k trong DS");
	printf("
3: Tim mot phan tu trong DS");
	printf("
4: Xoa phan tu tai vi tri k");
	printf("
5: Xoa phan tu x trong DS");
	printf("
6: nhap lai danh sach");
	printf("
7: Thoat");
	select(head,f);
	_getch();
	return 0;
}

**

## Còn đây là lỗi xảy ra ạ:

**

em thay fopen thành fopen_s thì nó lại sinh ra lỗi C2660:


Em xin cảm ơn trước .

Nguyễn Tấn Khoa viết 03:01 ngày 01/10/2018

Thay hàm fopen thành hàm fopen_s là xong

Hiep viết 03:10 ngày 01/10/2018

thay vào thì nó lại sinh ra lỗi khác ạ :(.

Nguyễn Tấn Khoa viết 03:01 ngày 01/10/2018

Thêm #define _CRT_SECURE_NO_WARNINGS vào đầu dòng code thử xem

Hiep viết 03:06 ngày 01/10/2018

em cám ơn nhưng hình như nó không được T_T.

Nguyễn Tấn Khoa viết 03:01 ngày 01/10/2018

Bạn chụp màn hỉnh thử

Hiep viết 03:00 ngày 01/10/2018

Nguyễn Tấn Khoa viết 03:06 ngày 01/10/2018

Thêm #define _CRT_SECURE_NO_WARNINGS thì đừng dùng fopen_s nữa, đổi thành fopen lại đi

Hiep viết 03:03 ngày 01/10/2018

à thế ạ cái này em không biết hề hề sr.

Hiep viết 03:03 ngày 01/10/2018

nó chuyển lại thành lỗi C4996 rồi ạ .

Nguyễn Tấn Khoa viết 03:11 ngày 01/10/2018

Đặt lên đầu dòng số 1 thử

Không thì xoá đi, theo hướng dẫn sau: Nhấp phải tại tên Project chọn Properties → Configuration → C/C++ → Preprocessor → trong mục Preprocessos Definitions phía bên phải thêm vào dòng _CRT_SECURE_NO_WARNINGS → OK.

Hiep viết 03:05 ngày 01/10/2018

thank you, đã xong rồi ạ, e cám ơn nhiều. sau gặp lỗi này sẽ lại biết cách sửa hế hế.

Nguyễn Tấn Khoa viết 03:02 ngày 01/10/2018

Muốn dùng fopen_s thì sử dòng 27 lại như sau: fopen_s(&f, "D:\\text.txt", "wb");
Còn dòng 103 thì bạn tự sửa nhé, mình không thấy nên không sửa được, nhìn đống trên hoa mắt quá.

Hiep viết 03:10 ngày 01/10/2018

à vậng không sao ạ :)).

Bài liên quan
0