mn cho mình hỏi như này là sao ạ. thanks
Hỏi 1 lỗi có thể liên quan đến khai báo động
Chắc vậy thật (heap buffer) nó ghi là wrote to memory.
4 Likes
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include <ctype.h>
int main(int argc, char* argv[])
{
char string[] = "tungdz", ketQuaNhapVao = 0, *kyTuBiAn = NULL, kyTuHienTai = 0, c = 0;
int soKiTuCuaAnSo = -1, i = 0, soLanDoanConLai = 5, soKyTuDaDung = 0, kiemTra = 0, viTriDaDoanDung[100] = { 0 }, a = 0;
do
{
soKiTuCuaAnSo++;
} while (string[soKiTuCuaAnSo] != '\0'); // đếm số kí tự trong từ bí mật
kyTuBiAn = malloc(soKiTuCuaAnSo * sizeof(char)); // khai báo động kí tự bí mật dựa theo số lượng kí tự của nó
for (i = 0; i < soKiTuCuaAnSo; i++)
{
kyTuBiAn[i] = '*';
kyTuBiAn[i + 1] = '\0';
} // giá trị đầu tiên toàn là dấu *
while (soLanDoanConLai > 0 && soKyTuDaDung != soKiTuCuaAnSo)
{
printf("ban con %d luot doan\ntu bi an la %s\nxin moi nhap chu\n ", soLanDoanConLai, kyTuBiAn);
kyTuHienTai = getchar();
for (i = 0; i < soKiTuCuaAnSo; i++) //kiểm tra xem kí tự hiện tại có xuất hiện trong từ khóa không
{
for (a = 0; a < soKyTuDaDung; a++)
{
if (i == viTriDaDoanDung[a])
{
i++;
}
}
if (kyTuHienTai == string[i])
{
kyTuBiAn[i] = kyTuHienTai;
viTriDaDoanDung[soKyTuDaDung] = i;
soKyTuDaDung++;
kiemTra = 1;
}
}
if (kiemTra != 1)
{
soLanDoanConLai--;
}
kiemTra = 0;
do
{
c = getchar();
} while (c != '\n');
}
if (soKyTuDaDung == soKiTuCuaAnSo)
{
printf("xin chuc mung ban da chien thang, tu khoa bi mat la %s", string);
}
else
{
printf("ban da thua cuoc,tu khoa bi mat la %s", string);
}
free(kyTuBiAn);
}
``` k biết kiểu gì nữa, code mình như này
Thêm một ô char
nữa mới đủ bạn còn kí tự ‘\0’ nữa.
4 Likes
đc nè, cảm ơn bạn nha :v