我試圖建立一個開關,我得到一個「表達式必須有整數或枚舉類型」。我猜測在winapi中的開關不使用LPSTR類型的變量?你如何在C中定義一個常量?
char testbuf[ 51 ]; // allocate space for 50 characters + termination
LPSTR test = testbuf;
scanf("%50s", test); // read at most 50 characters
printf("%s", test);
switch (test) {
case "etc" :
{
}
break;
這是未定義的行爲:你沒有任何擔保的字符數組,其中'測試的第一個字節'指向DWORD對齊。此取消引用操作可能會導致UNALIGNED異常。此外,這不應該與一個大型機器,如果它? – harper 2012-03-31 14:16:53
爲了減輕你對齊的擔憂,'*(WORD *)(test + 1)=='ct'&& *(WORD *)(test)=='te''將評估爲true。普通的'test + 1'和'test'不能用WORD對齊:)系統抽象出未對齊的訪問。有關詳細信息,請參閱此處:http://msdn.microsoft.com/zh-cn/library/aa290049(v=vs.71).aspx。事實上,這就是爲什麼在循環中不對齊的訪問是這樣一個性能殺手! – 2012-03-31 14:20:36
此外,Windows僅在小端機器上運行:http://support.microsoft.com/kb/102025和http://blogs.msdn.com/b/larryosterman/archive/2005/06/07/426334.aspx – 2012-03-31 14:24:27