Другие языки программирования и технологии

Как в языке си удалить строку из структуры?

DK
Davlatbek Kodirov
432
Если используется строка Си, т. е массив символов char*, то для освобождения памяти, занятой этим массивом надо использовать функцию free (собственно как и для любого массива).
Установка первого символа в '\0' не приведет к освобождению памяти и может привести к дополнительной путанице (крайне не советую делать).

Если используется строка char[], то как написал user49912, освободить их не получится, т. к память выделена под всю структуру. В этом случае установка '\0' в первый символ может быть оправдана. '\0' - признак окончания строки. Функции для работы со строками используют его для определения конца строки. Т. е, например, printf выведет пустую строку в этом случае.

Если используется С++ строка std::string, то для очистки можно использовать функцию std::string::clear. Стандарт не указывает, что объем строки должен остаться без изменения (в отличие от std::vector::clear) поэтому, будет ли освобожден участок памяти, занятый std::string, зависит от реализации.

P.s Если мой ответ помог, пожалуйста, поставьте лайк!
Мирас Талгатович*
Мирас Талгатович*
17 671
Лучший ответ
не совсем понятно, что подразумевается под удалением
в структуре в любом случае всегда отводится нужное количество байт под строку, их освободить не выйдет
можно записать туда пустую строку, например, установкой \0 в первый байт строки
Артём Белоус
Артём Белоус
51 164
Удалить нельзя, можно только очистить или преобразовать в другую структуру с потерей данных.

Для очистки строки в ОС Windows можно использовать функцию SecureZeroMemory из Windows.h или memset_s.
Для любой другой ОС можно использовать стандартный memset.

(user49912)"можно записать туда пустую строку, например, установкой \0 в первый байт строки", так делать нельзя так как могут появиться невидимые ошибки, можно проверить это вот так:

typedef struct {
int nTestNumber = 10;
char szBuff[10] = "123456789";
} stTest;

int main()
{
stTest test;

printf("nTestNumber = \"%d\"\nszBuff = \"%s\"\n\n", test.nTestNumber, test.szBuff);

test.szBuff[0] = '\0';
memset(test.szBuff, 'a', 5);

printf("nTestNumber = \"%d\"\nszBuff = \"%s\"\n\n", test.nTestNumber, test.szBuff);
return 0;
}