Давайте предположим, что у меня есть файл, который содержит следующие строки:Как использовать 2D-массив указателей в C для хранения строк?
option0 value0
option1 value1
....... ......
optionX valueX
Я пытаюсь сделать программу C, чтобы прочитать файл. Я решил создать 2D-массив указателей на строки и сохранить все параметры в pointee (s) первой строки и все значения в pointee (s) второй строки. Таким образом:
pointer[0][0] should point to option0
pointer[1][0] should point to value0
pointer[0][1] should point to option1
pointer[1][1] should point to value1
кажется, что программа читает файл успешно, но я не могу получить доступ к последовательности, чтобы распечатать их. Вот усеченная версия кода, который вызывает проблему:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (void) {
#define BUFF 1024
FILE *fd;
int i = 0;
char buff[BUFF];
char *options [2][20];
fd = fopen("foo.txt", "r");
while (!feof(fd)) {
if (fgets(buff, sizeof(buff), fd) != NULL) {
(options[0][i] = malloc(sizeof (char) * 512)
(options[1][i] = malloc(sizeof (char) * 512)
sscanf(buff, "%s %s", options[0][i], options[1][i]);
i++;
}
}
while (i >= 0) {
printf ("Option %i is %s its value is %s", i, *option[0][i], *option[1][i]);
i--;
}
fclose(fd);
return 0;
}
Я играл несколько дней с этим, но я не могу заставить его работать. Я проверил различные вопросы Stackoverflow и другие онлайн-ресурсы, но даже эксперименты не помогли мне понять это.
Что я хочу знать: Являются ли строки правильными с malloc и sscanf? Если «нет», почему? Почему я не могу напечатать строку с помощью инструкции printf? Как это исправить?
Пожалуйста, обратите внимание, что код, показанный только для целей тестирования, поэтому я знаю, что нет никакой проверки ошибок, и т.д ..
ли не используйте 'feof' для управления циклом. 'while (! feof (fd))' всегда неверно – ameyCU
Не используйте 2D-массивы в C. Используйте 'arr [i * width + j]', когда они вам понадобятся. BTW, вы хотите [хеш-таблицу] (https://en.wikipedia.org/wiki/Hash_table) –
@ameyCU Спасибо за предложение, я обязательно его настрою. – zilog