“main.exe”崩溃错误

时间:2013-11-04 19:50:52

标签: c++

我有一个简单的错误。该项目是创建基本菜单的骨架。新命令只计数从1到用户输入的整数。在继续之前,我已经发布了一个指向保存.cpp文件的pastebin的链接:
http://pastebin.com/pAi9EiEi

程序的其余部分运行并运行。但是,错误很简单。一旦我输入任何命令,它就会崩溃。运行错误检查后,我发现错误不是while而是if语句。错误与以下行类似:

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

这一行应该做的是复制cmd2中的内容并将其放入newCommand然后将其与上限进行比较:

char newCommand[] = "new";

2 个答案:

答案 0 :(得分:3)

“这条线应该做什么,复制cmd2中的内容并将其放入newCommand然后将其与无上限灵敏度进行比较:”

如果代码执行了此操作,则会将cmd2的原始内容与自身进行比较,不是吗?

copy cmd2 -> newCommand
is cmd2 == newCommand?

如果用户键入“open”,那么在循环的第一次迭代中,它会将“open”复制到“newCommand”中,并且你的程序中的任何地方都不再有“new”字符串。

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);

答案 1 :(得分:2)

该行不符合您的想法

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

它在newcommand中搜索cmd2的出现并返回指向它的指针(如果没有找到则为null),除非我错误地在stricmp中传递null是未定义的行为

你只想要一个简单的stricmp并且你取消了副本