Если используется строка Си, т. е массив символов char*, то для освобождения памяти, занятой этим массивом надо использовать функцию free (собственно как и для любого массива).
Установка первого символа в '\0' не приведет к освобождению памяти и может привести к дополнительной путанице (крайне не советую делать).
Если используется строка char[], то как написал user49912, освободить их не получится, т. к память выделена под всю структуру. В этом случае установка '\0' в первый символ может быть оправдана. '\0' - признак окончания строки. Функции для работы со строками используют его для определения конца строки. Т. е, например, printf выведет пустую строку в этом случае.
Если используется С++ строка std::string, то для очистки можно использовать функцию std::string::clear. Стандарт не указывает, что объем строки должен остаться без изменения (в отличие от std::vector::clear) поэтому, будет ли освобожден участок памяти, занятый std::string, зависит от реализации.
P.s Если мой ответ помог, пожалуйста, поставьте лайк!
Другие языки программирования и технологии
Как в языке си удалить строку из структуры?
не совсем понятно, что подразумевается под удалением
в структуре в любом случае всегда отводится нужное количество байт под строку, их освободить не выйдет
можно записать туда пустую строку, например, установкой \0 в первый байт строки
в структуре в любом случае всегда отводится нужное количество байт под строку, их освободить не выйдет
можно записать туда пустую строку, например, установкой \0 в первый байт строки
Удалить нельзя, можно только очистить или преобразовать в другую структуру с потерей данных.
Для очистки строки в ОС 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;
}
Для очистки строки в ОС 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;
}
Похожие вопросы
- Удалить знаки пунктуации из строки. Язык Си.
- Язык си, не понял несколько моментов по массивам и строкам
- Почему язык СИ такой сложный?
- Сортировка Структур по Алфавиту (Язык Си)
- Семь управляющих структур. Два способа их объединения. 28 ключевых слов. Так почему же язык Си считают сложным?
- Как удалить строку из файла (Visual Basic 6.0)
- Совет по программе на языке си (строки)
- Программирование на языке СИ с использованием подпрограммы-функции
- удалить все элементы, кроме имеющих заданное произведение цифр. язык си++.нужна срочная помощь
- Программирование на языке Си. Нужна небольшая помощь.