Подтвердить что ты не робот

Правильный способ опорожнения C-String

Я работаю над проектом на C, который требует, чтобы я много работал со струнами. Обычно я программирую на С++, так что это немного отличается от того, что говорит string.empty().

Мне интересно, что было бы правильным способом для удаления строки в C. Будет ли это так?

buffer[80] = "Hello World!\n";

// ...

strcpy(buffer, "");
4b9b3361

Ответ 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++;}}
    }