Я исправил прямые проблемы в вашей программе.Более глубокий момент здесь заключается в том, как добраться до нужного указателя.
array[4]
получает значение 4-го элемента.array
получает указатель на первый элемент &array[4]
получает указатель на 4-й элемент array + 4
получает указатель на 4-й элемент *(array + 4)
получает значение 4-го элемента *array[4]
получает значение, обрабатывает его какуказатель и пытается получить значение из цели указателей - это потребует дополнительных усилий, чтобы убедить компилятор, какой это будет тип.В большинстве случаев это, вероятно, бессмысленно.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct humans {
char sname[20];
}human;
void MyStrCpy(char * dst, int dst_n, char * src, int src_n)
{
for (int n = 0; n < dst_n && n < src_n; ++n)
{
dst[n] = src[n];
if (src[n] == 0) break;
}
dst[dst_n] = 0;
}
int main() {
human *person = (human *)malloc(sizeof(human) * 1);
int i, k, z;
for (i = 0; i<5; i++) {
person = (human *)realloc(person, sizeof(human)*(i + 1));
//I replace strcpy so it compiles on my machine
MyStrCpy(person[i].sname, 20, "john", 5);
person[i].sname[20] = 0;
}
for (i = 0; i<5; i++) {
printf("%s\n", person[i].sname);
}
return 0;
}