В case 0
вы пытаетесь установить x
в символ (типа char
), но в case 1
вы пытаетесь установить x
в строку C (типа * 1006)*).Это тип цитат, которые имеют значение;одинарные кавычки предназначены для символов, а двойные кавычки - для строк в стиле C.
Если вы хотите установить его в строку оба раза, поместите двойные кавычки вокруг 0
в x = '0'
.
Если вы хотите установить x
для символа, используйте одинарные кавычки как раз, так и разыменуйте указатель, например *x
, чтобы он стал *x = '0'
или *x = '1'
, или изменить тип x
с char*
(указатель на символ) на char
(символ).Тогда вам не нужно разыменовывать его. 1
Опять же, если вы пытаетесь установить x
в строку, было бы лучше использовать строку C ++ вместострока C, с std::string
.Затем вы сделаете это с двойными кавычками, такими как строка C, но получите множество дополнительных функций, таких как автоматическое управление памятью, проверка границ и все функции-члены, которые у него есть.
1 Как отметил Николас Гребиль: перед этим убедитесь, что он указывает на действительный char
, либо используя new
:
char* x = new char;
, либо создав char
в стеке:
char c;
char* x = &c;
Важно :
Если вы собираетесь использовать char*
с strcat
позже (или с любой функцией, ожидающей C-строку), вы должны правильно NULL
завершить свой буфер.Так что вам нужно сделать это следующим образом:
char x[2] = {}; // on the stack, filled with NULLs
// use a bigger number if you need more space
или
char* x = new char[2]; // on the heap, use more than 2 if you're
// storing more than 1 character
x[1] = NULL; // set the last char to NULL
Если вы этого не сделаете, вы получите мусор, если вам не повезло или сегфоесли вам повезет.
Затем, после того как вы объявите x
, как указано выше, вы можете сделать *x = '0'
или что-то еще.
Если вы решите использовать new[]
, сделайтеубедитесь, что вы освободили память с помощью delete[]
.