写入 "HC" 时缓冲区溢出 ,正在从 "HC" 读取无效数据

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
int main()
{
	int n;
	scanf("%d", &n);
	char** HC = (char**)malloc(sizeof(char*) * (n+1));
	assert(HC);
	for (int i = 1; i <= n; i++)
	{
		char* code = (char*)malloc(sizeof(char) * (n+1));
		assert(code);

		code[n] = '\0';
		int j;
		for (j = n-1; j >4; j--)
		{
			code[j] = 'a';
		}
		HC[i] = (char*)malloc(sizeof(char) * (n-j));
		assert(HC[i]);
		strcpy(HC[i], &code[j+1]);
	}
	for (int i = 1; i <= n; i++)
	{
		printf("%s\n", HC[i]);
	}
	
}

 这些警告怎末消除啊