Прямо сейчас config
- это тип , что означает структуру, которую вы определили. Вы не показываете нам идентификатор, относящийся к фактической переменной типа config
.
Итак, во-первых, нам нужен экземпляр типа config
. Вы либо сделаете
config c;
... c.filename ...
обратите внимание, что оператор доступа к структуре - .
, или вы сделаете что-то вроде
config *p = malloc(config)
/* error checking */
...c->filename ...
где ->
- оператор разыменования и доступа к указателю. Первая форма предпочтительна, если только у вас нет причины хотеть динамического размещения (что, увы, часто случается в c).
Тогда вы должны выяснить, кем именно вы хотите filename
. Так как вы выделили пространство для 64-символьных указателей, которые не указывают на выделенную память (кроме как по чистой случайности, а не по памяти, которую вы имеете в виду). Вы, вероятно, хотели {*} char filename[64]
(одно имя файла может иметь длину до 63 символов (чтобы оставить место для нулевого завершения)), в этом случае вы должны использовать
strcpy(c.filename,"file1.txt");
/* or */
strcpy(p->filename,"file1.txt");
в зависимости от того, как вы распределили структуру в первую очередь.
Если вы действительно хотите список имен файлов, тогда вы можете захотеть char *filenames[64]
, но вам придется выделить буфер для каждого имени, прежде чем вы сможете его использовать
c.filenames[0] = malloc(sizeOfString);
/* error checking */
strcpy(c.filenames[0],...
или как предложил другой плакат
c.filenames[o] = strdup(...
Первая форма может быть лучше, если вы строите свои имена файлов из нескольких частей и можете проецировать общую длину с самого начала.
{*} Позже вы можете удалить этот буфер фиксированной длины, но пока оставьте его.