Як можна зобразити порожній знак?


84

Зараз я пишу невеличку програму, але при компіляції я постійно отримую цю помилку

помилка: порожня символьна константа

Я розумію, що це тому, що я намагаюся замінити дійсний символ пустим пробілом, c[i]=''але я не зміг знайти іншого способу представити його.


Немає "порожнього місця" (неправильна термінологія), хоча може бути порожній рядок. Ви хочете замінити чи c[i]з порожнім простором , або ви хочете , щоб «ліквідувати» цей символ з масиву , як ви могли б зробити в редакторі при натисканні Backspace (тобто ви хочете CHARS гр [я-1] і з [ i + 1] стати суміжним після операції)?
Лоренцо Донаті - Codidact.com

1
Якщо ви розумієте рядки, то під час оголошення ви можете призначити char c[5] = "";порожній рядок, але char c = '';не є дійсним, як це пояснено нижче в 6 відповідях.
Grijesh Chauhan

Відповіді:


132

Ви можете використовувати c[i]= '\0'або просто c[i] = (char) 0.

Нульовий / порожній символ - це просто нульове значення, але він також може бути представлений у вигляді символу з екранованим нулем.


11
Так, і немає "порожнього символу". '\0'є нульовим символом, який не має нічого спільного NULL; нульовий символ - це просто символ, що має 0 як числовий код.
Лоренцо Донаті - Codidact.com

@LorenzoDonati Я називав це нульовим символом, порожній символ просто використовував термінологію OP. Я також це уточнив у своєму редагуванні. Як зауважує chux, NULL не дуже добре підходить для довідкових угод без покажчика, тому я також зробив це.
палко

1
@LorenzoDonati Так, я вирішив видалити його, оскільки він нічого не додає до цієї відповіді і виглядає поза контекстом для поточного обговорення.
палко

@LorenzoDonati Не null charповинен бути nul char одиноким l.
Grijesh Chauhan

2
Порожнього символу не існує. Називати нульовий символ порожнім символом просто неправильно.
Christoffer Hammarström

28

Ви не можете зберегти в символі "жодного символу" - це не має сенсу.

В якості альтернативи ви можете зберегти символ, який має для вас особливе значення - наприклад, нульовий символ '\0'- і поводитися з цим спеціально.


5
Я думаю, що це набагато краща відповідь, ніж прийнята, яка плутає null char та empty char. Як аналогія, це все одно, що сказати, що ти не можеш оголосити int і не зберігати 'no number' - ти повинен зберігати якесь значення.
simonwo

4
Ви можете мати нульовий рядок, ""оскільки рядок - це послідовність нуля або більше символів, але символ - це рівно одне значення - не нуль і не більше.
simonwo

11

Порожній простір char буде ' '. Якщо ви шукаєте нуль, це було б '\0'.


10

Так, c[i]=''це не дійсний код. Ми вводимо в дужки константу символів між ' ', наприклад c[i] = 'A';char A. але між ними ви не пишете жодного символу ''.

Порожній простір - це не що інше, як припустимо, якщо ви хочете призначити простір, виконайте:

якщо хоче призначити, nul charто виконайте:

Приклад: Припустимо, якщо c[]рядок ( \0масив символів, що закінчується нулем), якщо у вас є рядок. наприклад:

І ви замінюєте другий символ пробілом :

і якщо ви друкуєте його за допомогою printf наступним чином:

тоді результат буде:

І ви замінюєте другий символ на \ \ 0 :

тоді результат буде:

тому що рядок закінчується на \0.


Що робити, якщо після «\ 0» у нас є кілька символів. Я маю на увазі, припустимо, ми хочемо видалити символ із рядка, наприклад "sample" remove m. Хіба немає просто способу замінити його яким-небудь гіпотетичним порожнім символом, а не видалити його лівим зсувом символу після нього.
Himanshu Poddar

5

Не існує такого поняття, як «порожній персонаж» ''.

Якщо вам потрібен пробіл, який може бути представлений у вигляді простору: c[i] = ' 'або як його ASCII вісімкового еквівалента: c[i] = '\040'. Якщо вам потрібен символ NUL, це c[i] = '\0'.


4

Щоб представити факт відсутності значення, у вас є два варіанти:

1) Якщо весь charдіапазон значущий, і ви не можете зарезервувати будь-яке значення, використовуйте char*замість char:

Тоді ви будете мати, c[i] == NULLколи символу немає, а в іншому випадку *c[i]для звичайних символів.

2) Якщо вам не потрібні деякі значення, які можна представити, charтоді зарезервуйте одне, щоб вказати, що значення відсутнє, наприклад '\0'символ.

Тоді ви будете мати, c[i] == '\0'коли символу немає, а звичайні символи - інакше.


3
Питання позначено тегом c , а не c ++
Spikatrix 02

@CoolGuy Гарна думка, ти маєш рацію. Суть відповіді все ще стоїть, абстрагуючись від способу розподілу пам'яті.
BartoszKP 02

4

Існує два способи зробити одну і ту ж інструкцію, тобто порожній рядок. Перший спосіб - виділити порожній рядок у статичній пам’яті:

або, якщо ви хочете бути явним:

Опублікований вище спосіб стосується лише персонажа. І другий спосіб:

Не забудьте використовувати free () з цим, оскільки strdup () використовує malloc всередині.


2

Може бути корисно присвоїти нуль у рядку, а не явно робити якийсь індекс нульовим символом '\0'. Я використовував це для тестування функцій, які обробляють рядки, гарантуючи, що вони залишаються у відповідних межах.

З:

Це створює масив розміром 8 зі значеннями:


0

String before = EMPTY_SPACE+TAB+"word"+TAB+EMPTY_SPACE;

Де EMPTY_SPACE = "" (це рядок) TAB = '\ t' (це символ)

String after = before.replaceAll(" ", "").replace('\t', '\0');

означає після = "слово"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.