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 .
Bài liên quan
Thay hàm
fopen
thành hàmfopen_s
là xongthay vào thì nó lại sinh ra lỗi khác ạ :(.
Thêm
#define _CRT_SECURE_NO_WARNINGS
vào đầu dòng code thử xemem cám ơn nhưng hình như nó không được T_T.
Bạn chụp màn hỉnh thử
Thêm
#define _CRT_SECURE_NO_WARNINGS
thì đừng dùngfopen_s
nữa, đổi thànhfopen
lại đià thế ạ cái này em không biết hề hề sr.
nó chuyển lại thành lỗi C4996 rồi ạ .
Đặ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.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ế.
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á.
à vậng không sao ạ :)).