Правильный способ очистить C-строку
Я работаю над проектом на C, который требует от меня много возиться со строками. Обычно я программирую на C++, так что это немного отличается от просто слова string.пустой.)(
Мне интересно, каким будет правильный способ очистить строку в C. Будет ли это так?
buffer[80] = "Hello World!n"; // ... strcpy(buffer, "");
4 ответов
Это зависит от того, что вы подразумеваете под "пустым". Если вы просто хотите строку нулевой длины, то ваш пример будет работать.
Это также будет работать:
buffer[0] = '';
Если вы хотите обнулить все содержимое строки, вы можете сделать это так:
memset(buffer,0,strlen(buffer));
но это будет работать только для обнуления до первого нулевого символа.
если строка является статическим массивом, вы можете использовать:
memset(buffer,0,sizeof(buffer));
два других способа 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, но инициализирует весь массив с нулем.
наконец - то я хочу, чтобы вы имели в виду свою среду выполнения. Более того, если вы обрабатываете огромные массивы (6 цифр и выше), вы должны попытаться установить первое значение в Null вместо запуска memset() через всю строку.
сначала это может выглядеть грязнее, но намного быстрее. Вам просто нужно обратить больше внимания на свой код;)
надеюсь, это было полезно для всех;)
зависит от того, что вы подразумеваете под опорожнять. Если вы просто хотите пустую строку, вы можете сделать
buffer[0] = 0;
Если вы хотите установить каждый элемент в ноль, сделайте
memset(buffer, 0, 80);
требуется имя строки и ее длина будет ноль всех символов другие методы могут остановиться на первом нуле, с которым они сталкиваются
void strClear(char p[],u8 len){u8 i=0;
if(len){while(i<len){p[i]=0;i++;}}
}