Как я могу сбросить массив строк на языке Си? - PullRequest
1 голос
/ 03 октября 2009

У меня есть цикл, который заполняет "char array_of_strings [100] [100];" В какой-то момент я хочу иметь возможность очистить его от всех добавленных строк и начать добавлять с позиции 0. Как я могу очистить / отдохнуть в C?

Спасибо

Ответы [ 4 ]

7 голосов
/ 03 октября 2009

Вы можете использовать функцию memset , чтобы вернуть все символы в ноль.

P.S. Использование двумерного массива довольно необычно для работы со строками. Попробуйте перейти к динамическому распределению отдельных строк.

3 голосов
/ 03 октября 2009

Эта структура данных действительно не имеет внутренней структуры. Вы в основном сбрасываете его, притворяясь, что в нем ничего нет.

У вас есть счетчик, который сообщает вам, какие строки вы заполнили, верно? Установите его на ноль. Готово.

2 голосов
/ 03 октября 2009
memset(array_of_strings, 0, sizeof(array_of_strings));

Это чище, чем вводить магическое число для размера, и с меньшей вероятностью сломать дорогу, когда кто-то изменит размер вашего массива строк. Поскольку вы знаете размер массива во время компиляции, с помощью sizeof будет работать.

Вы также можете использовать bzero, который очень похож на memset, но только для обнуления. На некоторых платформах bzero может быть быстрее memset, но, честно говоря, обе функции настолько быстры, что раскалывать волосы здесь глупо.

bzero(array_of_strings, sizeof(array_of_strings));

bzero требует от вас #включают потребности в memset #include

Справочная страница memset находится здесь

Справочная страница bzero находится здесь

2 голосов
/ 03 октября 2009

Предполагая, что вы на самом деле используете массив как строки, тогда что-то вроде этого должно работать:

int i;
for (i=0; i<100; i++)
   array_of_strings[i][0] = 0;

Конечно, если вы не рассматриваете свои данные как строки, тогда вам может понадобиться что-то вроде memset.

...