2013-11-04 167 views
0

我有一個簡單的錯誤。該項目是創建一個基本菜單的骨架。新命令從1開始計數到用戶輸入的整數。我繼續之前,我已經發佈一個鏈接,握住我的.cpp文件中引擎收錄:
http://pastebin.com/pAi9EiEi「main.exe」崩潰錯誤

程序運行和工程的其餘部分。但是,錯誤很簡單。只要輸入任何命令,它就會崩潰。在運行錯誤檢查之後,我發現錯誤不是這個時候,而是if語句。該錯誤是類似於這樣的行:

if (stricmp(strstr(newCommand, cmd2), newCommand) == 0) 

什麼這條線是應該做的,是複製的內容是CMD2並把它放在newCommand則沒有上限的敏感性比較它:

char newCommand[] = "new"; 
+3

你可能會[給學生公開信](http://meta.programmers.stackexchange.com/q/6166/64132)有用。 –

+0

你禁止使用std :: string嗎?因爲如果允許的話,代碼就會變得非常簡單 –

+0

@KateGregory除了他想做一個不區分大小寫的比較:) – kfsone

回答

3

「什麼這行是應該做的做了,是複製的內容是在cmd2並把它放在newCommand然後比較它沒有帽敏感性:「

如果代碼做到這一點,它會比較cmd2以前的內容本身,不是嗎?

copy cmd2 -> newCommand 
is cmd2 == newCommand? 

如果用戶鍵入了「開放式」,然後在你的循環的第一次迭代中,將複製「開放」到「newCommand」,你就沒有再在你的程序中的字符串「新」的任何地方。

strstr搜索第二個字符串的第一個字符串。

strstr("hello world", "world"); // returns pointer to 'world' in 'hello world' 
strstr("biscuit", "new"); // returns NULL to indicate new doesn't occur in 'biscuit' 

當然你真正想要做的是簡單的:

if (stricmp(newCommand, cmd2) == 0) { 
    // match 
} 

順便說一句,如果你沒有要複製 「CMD2」 到 「newCommand」,你想用strcpy(destinationStr, sourceStr);

strcpy(newCommand, cmd2); 
2

該行不會做你認爲它

http://www.cplusplus.com/reference/cstring/strstr/

它搜索CMD2的newcommand的發生,並返回一個指向它(空,如果沒有t上找不到),除非我弄錯傳遞一個空的stricmp是不確定的行爲

你只想要一個簡單的stricmp,你與複製