我有一个简单的错误。该项目是创建基本菜单的骨架。新命令只计数从1到用户输入的整数。在继续之前,我已经发布了一个指向保存.cpp文件的pastebin的链接:
http://pastebin.com/pAi9EiEi
程序的其余部分运行并运行。但是,错误很简单。一旦我输入任何命令,它就会崩溃。运行错误检查后,我发现错误不是while而是if语句。错误与以下行类似:
if (stricmp(strstr(newCommand, cmd2), newCommand) == 0)
这一行应该做的是复制cmd2中的内容并将其放入newCommand然后将其与上限进行比较:
char newCommand[] = "new";
答案 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并且你取消了副本