Я пишу программу, которая передает данные из файла в массив, но у меня проблемы с fopen (). Кажется, он работает нормально, когда я жестко закодировал путь к файлу в параметрах (например, fopen ("data/1.dat", "r");
), но когда я передаю его как указатель, он возвращает NULL.
Обратите внимание, что в строке 142 будет напечатано «data / 1.dat», если оно введено из командной строки, так что parse_args () работает.
132 int
133 main(int argc, char **argv)
134 {
135 FILE *in_file;
136 int *nextItem = (int *) malloc (sizeof (int));
137 set_t *dictionary;
138
139 /* Parse Arguments */
140 clo_t *iopts = parse_args(argc, argv);
141
142 printf ("INPUT FILE: %s.\n", iopts->input_file); /* This prints correct path */
143 /* Initialise dictionary */
144 dictionary = set_create (SET_INITAL_SIZE);
145
146 /* Use fscanf to read all data values into new set_t */
147 if ((in_file = fopen (iopts->input_file, "r")) == NULL)
148 {
149 printf ("File not found...\n");
150 return 0;
151 }
Спасибо!
Риз
БОЛЬШЕ: Если я попытаюсь напечатать строку после запуска set_create () (ln 144), строка не будет напечатана. (Но в этой функции вообще нет ссылки на строку ...)
47 set_t *
48 set_create(int size)
49 {
50 set_t *set;
51
52 /* set set_t members */
53 set->items = 0;
54 set->n_max = size;
55 set->lock = FALSE;
56
57 /* allocate memory for dictionary input */
58 set->data = (int *) malloc (size * sizeof (int));
59
60 return set;
61 }
Это работает, если я вызываю эту функцию после fopen ().
Я не вижу, как это влияет на имя файла, хотя ...
Еще раз спасибо.