2013-11-04 168 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,你与复制