Mọi người cho mình hỏi 1 lỗi hình như có liên quan đến khai báo động :v

image
mn cho mình hỏi như này là sao ạ. thanks

Chắc vậy thật (heap buffer) :smiley: 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 :smiley: còn kí tự ‘\0’ nữa.

4 Likes

đc nè, cảm ơn bạn nha :v

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