Правильный способ очистить 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++;}}
    }