В обычном случае вам нужно сравнить строки с помощью алгоритма сравнения строк следующим образом:
if(strcmp(test, "etc") == 0) {
...
}
Тем не менее, интересно, если строки могут быть однозначно идентифицированы их первыми 4 байтами, и вы хотитеболее оптимизированный переключатель, вы можете выполнять такие приемы, как это:
#include <Windows.h>
#include <stdio.h>
int main(void)
{
LPSTR test = "etc";
switch(*(DWORD *)test) {
case 'cte':
puts("etc case");
break;
default:
puts("not hit");
break;
}
return ERROR_SUCCESS;
}
Это выводит etc case
на консоль, потому что мы берем указатель строки и обрабатываем его как указатель DWORD
.Затем указатель разыменовывается как таковой и сравнивается со значением DWORD
строки.В этом случае длина строки составляет всего 3 символа, но если рассмотреть нулевой терминатор на конце, он может быть однозначно идентифицирован его первыми 4 байтами.
Примечание. Следует отметить, что этот прием работает только на архитектурах.которые позволяют выравнивать доступ к памяти.Причина в том, что потенциально строка может быть не выровнена по DWORD.