Spaces only
[ Примечание : При необходимости сохраните профиль с новым именем, поскольку профиль по умолчанию не может быть перезаписан.]
Перед версией 3.6:
Window->Preferences->Editors->Text Editors->Insert spaces for tabs
Версия 3.6 и позже:
Примечание, что текстовый редактор по умолчанию используется в качестве основания для многих редакторов не-Java в Eclipse. Удивительно, что эта установка не была доступна до 3.3.
Spaces only
Следует тем же инструкциям для HTML, но выбирает CSS Файлы вместо [1 190] Файлы .
HTMLПо умолчанию, файлы JSP следуют за предпочтениями форматирования Файлов HTML.
настроен в Предпочтениях.
Есть несколько структур данных, которые позволяют добавлять элементы динамически, без необходимости заранее знать максимальное количество требуемых элементов. Существуют связанные списки, бинарные деревья поиска, сбалансированные деревья, попытки, кучи и многое другое.
Точно так же существует множество способов динамического распределения строк разной длины.
Самый простой способ, вероятно, - использовать простой связанный список :
typedef struct _node {
struct _node *next;
char *value;
} node_t;
Вы отслеживаете заголовок , первый элемент в списке, и каждое поле следующее указывает на следующий узел в списке . Например, чтобы просмотреть список, вы должны написать что-то вроде этого:
currentNode = head;
while(currentNode != NULL) {
/* do something with currentNode->value */
currentNode = currentNode->next;
}
Не зная, что именно вы хотите сделать, я не могу предложить никаких лучших предложений.
Какие операции вы хотите часто выполнять со структурой данных? Собираетесь ли вы просто перебирать строки, искать строки, добавлять и удалять строки?
Если в какой-то момент инициализации вы знаете количество строк и вам не нужно выделять больше, вы можете просто использовать:
char **myStrings = (char **)malloc(numStrings*sizeof(*myStrings);
, а затем выделение для каждой строки:
for(int i=0; i<numStrings; i++)
myStrings[i] = (char *)malloc(stringLength[i] + 1);
Вы тем не менее, при необходимости можно было бы выделить более динамично.
Если вам нужно динамически перераспределить массив строк:
myStrings = (char **)realloc(myStrings, numStringsNew*sizeof(myStrings));
или если конкретная строка должна изменить свою длину, просто перераспределите эту конкретную строку:
myStrings[the_one_to_realloc] = (char *)realloc(myStrings[the_one_to_realloc], stringLengthNew + 1);
Беги, не ходи, на веб-сайт Принстона и получай
Дэйв Хэнсон Интерфейсы и реализации C . Структура данных под названием Seq_T
идеально подходит для динамического создания списка строк. Дэйв не предоставляет читателя буферизации, но вы можете считывать строки в конечный буфер, преобразовывать результат с помощью Text_put
, а если строка слишком велика для одного буфера, объединять результаты с помощью Text_cat
. Код CII управляет всем динамическим ростом за вас.
Нет особых причин изобретать велосипед, в отличие от того, что предлагают некоторые ответы.
Не разрабатывайте свою собственную библиотеку, хотя существует несколько бесплатных программных библиотек, которые реализуют такие абстракции. Одним из примеров, среди прочего, является glib , который имеет много типов, таких как динамически растущие строки и динамически растущие списки .
Есть несколько структур данных, которые позволяют вам динамически расти. Как следует из двух предыдущих ответов, вы можете использовать массив указателей, связанный список и т. Д.
Все зависит от требований вашей реализации:
и т. д. Предлагаю прочитать немного о структурах данных и решить, что вам больше подходит. Все они могут быть реализованы на C.
Посмотрите эту статью в Википедии (перейдите в раздел «Примеры» для получения списка опций, если вы хотите пропустить теорию)
Для динамического хранения можно использовать флаг m для % s
, как показано ниже:
char *variable;
scanf ("%ms", &variable);
/* use variable */
free(variable);
Строка, указанная переменной
будет достаточно для хранения данных.
Обратите внимание, что вы обязаны освободить
переменную после ее использования.