C Очистить переменную
char x [1000];
x = 'hello';
.....
clear contents of x???
Что бы я использовал, чтобы очистить х? Я не могу переинициализировать его, использовать strcpy(x, '/0') или free().
4 ответа
Вы не можете ничего присвоить массиву, который ваша переменная x
является. Итак, поэтому все, что начинается с x =
неправильно. во-вторых 'hello'
это не строка, это литерал с несколькими символами, который имеет тип int
так что это тоже не имеет смысла. Строковый литерал заключен в "
в то время как символьные (или многозначные) литералы заключены в '
,
Так что, если вы хотите заполнить свой буфер x
со строкой "привет", которую вы используете strncpy
или даже лучше strlcpy
если доступно:
strncpy( x, "hello", sizeof( x ) );
strlcpy( x, "hello", sizeof( x ) );
strlcpy
Функция лучше, потому что она всегда завершает строку с nul
персонаж.
Если вы хотите очистить его, вы можете сделать то, что предложили другие ответы. Я бы предложил использовать strncpy
или же strlcpy
с пустой строкой, как предложено @codaddict. Это код, который наиболее очевидно говорит: "Эй, я хочу очистить эту строку". Если вы хотите удалить все содержимое строки из памяти (например, если она содержит пароль или что-то подобное), используйте memset
как предложили @Ken и @Tom.
Также обратите внимание, что вы никогда не используете такие функции, как strcpy
или же strcat
которые не принимают размер выходного буфера в качестве параметра. Они действительно небезопасны и вызывают неприятные ошибки и уязвимости в безопасности. Даже не используйте их, если вы знаете, что ничего не может пойти не так, просто привыкните использовать безопасные функции.
Использование free()
было бы неправильно, так как x
находится в стеке.
Что вы подразумеваете под ясным? Установить значение по умолчанию? Вы можете использовать memset
? (Я копирую твой код как есть)
#define CLEAR(x) memset(x,'\0',1000)
char x[1000];
x= 'hello';
CLEAR(x)
Если нет, вы всегда можете использовать цикл for.
x='hello';
может не делать то, что вы ожидаете, потому что '
обозначает символьную константу (или в данном случае многосимвольную константу), а не строку.
На самом деле, gcc не примет вышеуказанный код, жалуясь, что 'hello'
это долго (это на машине с 4 байта int
s), и это x = 'hell'
является несовместимым назначением, потому что char[]
это не то же самое, что int
,
Не должен
char x[1000];
x="hello";
работать, потому что вы не можете назначить массивы таким образом.
Если под "очистить" вы имеете в виду "очистить все биты в массиве", как насчет memset(x, '\0', 1000);
?