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 байта ints), и это x = 'hell' является несовместимым назначением, потому что char[] это не то же самое, что int,

Не должен

char x[1000];
x="hello";

работать, потому что вы не можете назначить массивы таким образом.

Если под "очистить" вы имеете в виду "очистить все биты в массиве", как насчет memset(x, '\0', 1000);?

Другие вопросы по тегам