Несовместимые типы операндов
char buf[6000];
bool bturn;
char *cturn;
strstr(buf, "HEXTURN") == NULL ? bturn = NULL : cturn = strstr(buf, "HEXTURN") + 7;
Мне надо проверить,есть ли подстрока "HEXTURN" в буфере buf(char buf[6000]),и если есть, то присвоить cturn первый символ после подстроки "HEXTURN",а если подстроки нет,то bturn = NULL,но у меня подчеркивает двоеточие и пишет что несовместимые типы операндов bool и char.Как такое может быть ,когда у меня bturn и cturn в отдельных блоках условия?
Ответы (2 шт):
bturn = NULL
это выражение имеет тип bool - вы сами написали
bturn = NULL
А
cturn = strstr(buf, "HEXTURN") + 7;
имеет тип char * -
char *cturn;
А в тернарном операторе a ? b : c и b, и c должны быть одного типа... Это же - одно выражение. А как одно выражение может быть одновременно разных типов?
Так что используйте if-else.
Условия замедляют программу, и лучше программу избавить от излишных условий. В данном случаи это делать легко _ не нужны никакие условия:
char* cturn;
bool bturn = cturn = strstr(buf, "HEXTURN");
cturn += 7*(size_t)bturn;