Несовместимые типы операндов

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 шт):

Автор решения: Harry
bturn = NULL

это выражение имеет тип bool - вы сами написали

bturn = NULL

А

cturn = strstr(buf, "HEXTURN") + 7;

имеет тип char * -

char *cturn; 

А в тернарном операторе a ? b : c и b, и c должны быть одного типа... Это же - одно выражение. А как одно выражение может быть одновременно разных типов?

Так что используйте if-else.

→ Ссылка
Автор решения: AR Hovsepyan

Условия замедляют программу, и лучше программу избавить от излишных условий. В данном случаи это делать легко _ не нужны никакие условия:

char* cturn;
bool bturn = cturn = strstr(buf, "HEXTURN");
cturn += 7*(size_t)bturn;
→ Ссылка