Правильный способ опорожнения C-String
Я работаю над проектом на C, который требует, чтобы я много работал со струнами. Обычно я программирую на С++, так что это немного отличается от того, что говорит string.empty().
Мне интересно, что было бы правильным способом для удаления строки в C. Будет ли это так?
buffer[80] = "Hello World!\n";
// ...
strcpy(buffer, "");
Ответы
Ответ 1
Это зависит от того, что вы подразумеваете под "пустым". Если вы просто хотите строку с нулевой длиной, тогда ваш пример будет работать.
Это также будет работать:
buffer[0] = '\0';
Если вы хотите обнулить все содержимое строки, вы можете сделать это следующим образом:
memset(buffer,0,strlen(buffer));
но это будет работать только для обнуления до первого символа NULL.
Если строка представляет собой статический массив, вы можете использовать:
memset(buffer,0,sizeof(buffer));
Ответ 2
Два других способа: strcpy(str, "");
и string[0] = 0
Чтобы действительно удалить содержимое переменной (в случае, если у вас есть грязный код, который не работает должным образом с приведенными выше фрагментами: P) используйте цикл, как в приведенном ниже примере.
#include <string.h>
...
int i=0;
for(i=0;i<strlen(string);i++)
{
string[i] = 0;
}
Если вы хотите удалить динамический выделенный массив символов с самого начала,
вы можете использовать комбинацию malloc() и memset() или - и это намного быстрее - calloc(), который делает то же самое, что и malloc, но инициализирует весь массив с помощью Null.
Наконец, я хочу, чтобы у вас было время выполнения.
В любом случае, если вы обрабатываете огромные массивы (6 цифр и выше), вы должны попытаться установить первое значение в Null вместо запуска memset() через всю строку.
Сначала это может выглядеть грязно, но быстрее. Вам просто нужно больше внимания уделять вашему коду;)
Я надеюсь, что это было полезно для всех;)
Ответ 3
Зависит от того, что вы подразумеваете под опорожнением. Если вам просто нужна пустая строка, вы можете сделать
buffer[0] = 0;
Если вы хотите, чтобы каждый элемент был равен нулю, do
memset(buffer, 0, 80);
Ответ 4
требуется имя строки и ее длина
будет ноль всех символов
другие методы могут остановиться на первом нуле, с которым они сталкиваются
void strClear(char p[],u8 len){u8 i=0;
if(len){while(i<len){p[i]=0;i++;}}
}