Здесь
char *str[4]; /* what str[0] contains ? some junk data, need to assign valid address */
for (int i = 0; i < 4; i++)
scanf("%s", str[i]); /* No memory for str[i] here */
str
- это массив символьных указателей , и они не инициализированы, т.е. не указывают ни один действительный адрес.Одним из способов решения этой проблемы является выделение памяти для каждого указателя на символ , после которого вы можете поместить некоторые данные в str[i]
.Например,
char *str[4];
for (int i = 0; i < 4; i++) {
str[i] = malloc(MAX); /* define MAX value as per requirement */
scanf("%s", str[i]); /* Now str[i] has valid memory */
}
И как только работа выполнена с динамической памятью, не забудьте освободить динамическую память, вызвав free(str[i])
для каждого указателя на символ , чтобы избежать памятиутечка .